【问题标题】:Unicode Query in OpenRowSetOpenRowSet 中的 Unicode 查询
【发布时间】:2013-04-20 05:18:23
【问题描述】:

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

【问题讨论】:

  • Set @sql= N'SELECT *.... - 这行得通吗?
  • 不。您的解决方案不起作用
  • @sheykholeslam:试试... @p1 = N''''' + ...

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


【解决方案1】:

当您使用 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' + '''''' for 'EXEC dbo.usp_test @p1 ='p1''

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多