0

ストアド プロシージャ内に動的 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か?

4

2 に答える 2

1

これを試して...

CREATE PROC dbo.GetOrders
@UserID INT = 2
AS
BEGIN
  SET NOCOUNT ON;
  DECLARE @SQLString NVARCHAR(MAX);

    SET @SQLString = N' SELECT * FROM dbo.Orders ' 
                   + N' WHERE UserID = @UserID '


EXEC sp_executesql @SQLString
                   ,N'@UserID INT'
                   ,@UserID
END

または、単に次を使用します

CREATE PROC dbo.GetOrders
@UserID INT = 2
AS
BEGIN
  SET NOCOUNT ON;

 SELECT * FROM dbo.Orders 
 WHERE UserID = @UserID 
END
于 2015-05-12T23:24:16.840 に答える