以下のストアドプロシージャを作成しようとすると、次のエラーが表示されます。
オペランド型の衝突:uniqueidentifierはintと互換性がありません
このエラーの原因は明確ではありません。実際、UserIDはすべてのテーブルでintです。誰かが私が間違ったことを教えてくれますか?
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
これらのテーブルの少なくとも1つがUserID
をuniqueidentifier
ではなくint
として定義しているように思えます。各テーブルのデータを確認しましたか? SELECT TOP 1 UserID FROM
各テーブルは何をもたらしますか? int
またはGUID
?
[〜#〜] edit [〜#〜]
UserIDという名前の列を含むすべてのテーブルに基づいてプロシージャを構築したと思います。スクリプトはaspnet_Membership
テーブルを含めるべきではないと思います。これは実際には「自分の」テーブルの1つではないからです。
aspnet_Membership
データベースを中心にテーブルを設計する場合、そのテーブルがint
列にuniqueidentifier
を明確に使用しているのに、なぜ残りの列UserID
なのですか?
ビュー経由でこれにアクセスしている場合は、 try sp_recompile
またはビューの更新。
sp_recompile
:
ストアドプロシージャ、トリガー、およびユーザー定義関数は、次に実行されるときに再コンパイルされます。これは、プロシージャキャッシュから既存のプランを削除して、次にプロシージャまたはトリガが実行されたときに新しいプランを強制的に作成することによって行われます。 SQL Server Profilerコレクションでは、イベントSP:Recompileの代わりにイベントSP:CacheInsertが記録されます。
引数
[ @objname= ] 'object'
現在のデータベース内のストアドプロシージャ、トリガー、テーブル、ビュー、またはユーザー定義関数の修飾名または非修飾名。オブジェクトはnvarchar(776)であり、既定値はありません。 objectがストアドプロシージャ、トリガー、またはユーザー定義関数の名前である場合、ストアドプロシージャ、トリガー、または関数は、次回の実行時に再コンパイルされます。 objectがテーブルまたはビューの名前である場合、テーブルまたはビューを参照するすべてのストアドプロシージャ、トリガー、またはユーザー定義関数は、次回の実行時に再コンパイルされます。
リターンコード値
0 (success) or a nonzero number (failure)
備考
sp_recompile
は、現在のデータベースでのみオブジェクトを探します。
ストアドプロシージャ、またはトリガー、およびユーザー定義関数で使用されるクエリは、コンパイル時にのみ最適化されます。統計に影響を与えるインデックスまたはその他の変更がデータベースに加えられると、コンパイルされたストアドプロシージャ、トリガー、およびユーザー定義関数が効率を失う可能性があります。テーブルで動作するストアドプロシージャとトリガーを再コンパイルすると、クエリを再最適化できます。