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
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
?
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.