web-dev-qa-db-fra.com

Clash de type opérande: uniqueidentifier est incompatible avec int

Lorsque j'essaie de créer la procédure stockée ci-dessous, j'obtiens l'erreur suivante:

Clash de type opérande: uniqueidentifier est incompatible avec int

Pour moi, la cause de cette erreur n'est pas claire. UserID est en fait un int dans toutes mes tables. Quelqu'un peut-il me dire ce que j'ai fait de mal?

create procedure dbo.DeleteUser(@UserID int)
as

    delete from [aspnet_Membership] where UserId = @UserID
    delete from [Subscription] where UserID = @UserID
    delete from [Address] where UserID = @UserID
    delete from [User] where UserID = @UserID

go
17
hughesdan

Pour moi, au moins une de ces tables a défini UserID comme uniqueidentifier, pas comme int. Avez-vous vérifié les données de chaque tableau? Qu'est-ce que SELECT TOP 1 UserID FROM le rendement de chaque table? Un int ou un GUID?

MODIFIER

Je pense que vous avez construit une procédure basée sur toutes les tables qui contiennent une colonne nommée UserID. Je pense que vous n'auriez pas dû inclure le aspnet_Membership table dans votre script, car ce n'est pas vraiment une de "vos" tables.

Si vous vouliez concevoir vos tables autour du aspnet_Membership base de données, alors pourquoi le reste des colonnes int alors que cette table utilise clairement un uniqueidentifier pour la colonne UserID?

18
Aaron Bertrand

Si vous y accédez via une vue, alors essayez sp_recompile ou des vues rafraîchissantes.

sp_recompile:

Entraîne la recompilation des procédures stockées, des déclencheurs et des fonctions définies par l'utilisateur lors de leur prochaine exécution. Pour ce faire, il supprime le plan existant du cache de procédures, forçant la création d'un nouveau plan lors de la prochaine exécution de la procédure ou du déclencheur. Dans une collection SQL Server Profiler, l'événement SP: CacheInsert est enregistré à la place de l'événement SP: Recompile.

Arguments

[ @objname= ] 'object'

Nom qualifié ou non qualifié d'une procédure stockée, d'un déclencheur, d'une table, d'une vue ou d'une fonction définie par l'utilisateur dans la base de données actuelle. l'objet est nvarchar (776), sans valeur par défaut. Si objet est le nom d'une procédure stockée, d'un déclencheur ou d'une fonction définie par l'utilisateur, la procédure stockée, le déclencheur ou la fonction sera recompilé la prochaine fois qu'il sera exécuté. Si objet est le nom d'une table ou d'une vue, toutes les procédures stockées, déclencheurs ou fonctions définies par l'utilisateur qui référencent la table ou la vue seront recompilées lors de leur prochaine exécution.

Valeurs des codes de retour

0 (success) or a nonzero number (failure)

Remarques

sp_recompile recherche un objet dans la base de données actuelle uniquement.

Les requêtes utilisées par les procédures stockées ou déclencheurs et les fonctions définies par l'utilisateur ne sont optimisées que lorsqu'elles sont compilées. À mesure que des index ou d'autres modifications affectant les statistiques sont apportés à la base de données, les procédures stockées compilées, les déclencheurs et les fonctions définies par l'utilisateur peuvent perdre de leur efficacité. En recompilant les procédures stockées et les déclencheurs qui agissent sur une table, vous pouvez réoptimiser les requêtes.

2
user280868