1

nvarchar パラメータを持つストアド プロシージャがあります。OPENROWSET を使用して返されたテーブルを取得したい。しかし、次のコードを使用すると、結果が正しくなくなります

Declare @ID int
Declare @sql nvarchar(max)
Declare @p1  nvarchar(8)
Set @ID=1
Set @sql='SELECT * 
FROM OPENROWSET(
    ''SQLNCLI'',
    ''DRIVER={SQL Server};'',
    ''EXEC dbo.usp_test @p1 =''''' + @p1 + ''''')'
Exec(@sql)

OPENROWSET はクエリを VARCHAR に変換し、プロシージャを正しく実行しません。OPENROWSET は私のコードを次のように実行するようです:

exec dbo.usp_test @p1='????????'

したがって、結果は正しくありません。問題を解決するための OPENROWSET のオプションはありますか?

4

1 に答える 1

0

データを使用している場合、次のように文字列値の前にnvarchar特定の文字 ( ) を追加する必要があります。N

DECLARE @ID int
DECLARE @sql nvarchar(max)
DECLARE @p1  nvarchar(8)
SET @ID=1
SET @sql = N'SELECT * 
             FROM OPENROWSET(''SQLNCLI'',
                          ''DRIVER={SQL Server};'',
                          ''EXEC dbo.usp_test @p1 = N''' + @p1 + N''''')'
EXEC(@sql)

注:
あなたが持っているとき'''EXEC dbo.usp_test @p1 =''''' + 'p1' + ''''''は、'EXEC dbo.usp_test @p1 =''p1''それは間違っており、のよう'''EXEC dbo.usp_test @p1 =''' + 'p1' + ''''''にする必要があります'EXEC dbo.usp_test @p1 ='p1''

于 2015-05-23T07:34:31.340 に答える