1

nvarchar 매개 변수가있는 저장 프로 시저가 있습니다. OPENROWSET을 사용하여 반환 된 테이블을 가져 오려고합니다. 나는 다음과 같은 코드를 사용할 때하지만 결과는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에 옵션이 있습니까? 당신이 nvarchar 데이터를 사용하는 경우

+0

'Set @ sql = N'SELECT * .... '-이 방법이 효과가 있습니까? –

+0

nope. 당신의 해결책이 작동하지 않습니다. –

+2

@sheykholeslam :'... @ p1 = N '' '' '+ ...' –

답변

0

는이처럼 문자열 값 이전에 특정 문자 (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' + ''''''

관련 문제