ストアド プロシージャ内に動的 SQL ステートメントを作成しようとしています。これを簡略化したバージョンを次に示します。
CREATE PROC dbo.GetOrders
@UserID INT = 2
AS
DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString = N'(
SELECT * FROM dbo.Orders WHERE UserID = '+@UserID+'
)
EXEC sys.sp_executesql @SQLString
私が抱えている問題はsp_executesql
、Unicode データでしか機能しないことです。@UserID
したがって、整数であるパラメーターで変換エラーが発生します。
nvarchar 値 'SELECT * FROM dbo.Orders WHERE UserID = ' を変換するときに変換に失敗しました
ストアド プロシージャの開始時にパラメータを宣言し、ユーザーがそれらの値を指定できるようにする必要があります。これまで見てきた使用例sp_executesql
では、sp_executesql
. 同じストアド プロシージャの他の領域でパラメーターを再利用する必要があるため、これはうまくいきません。
すべてのパラメータを type に指定せずに、どうすればこれを解決できますnvarchar
か?