OpenRowSet中的Unicode查询

时间:2013-04-20 05:18:23

标签: sql-server-2005 stored-procedures unicode nvarchar openrowset

我有一个带有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中有任何选项可以解决我的问题吗?

1 个答案:

答案 0 :(得分: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''