Sql Server 2008 r2存储过程阿拉伯列名称未出现

Sql Server 2008 r2存储过程阿拉伯列名称未出现,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我尝试使用这个sql代码 declare @resultSet Nvarchar(4000) set @resultSet = 'SELECT byng.Quantity * itm.Price N''السعر'' FROM [Buying] byng inner join Item itm on byng.ItemId = itm.Id ' exec(@resultSet) 列名总是以UTF编码显示,看起来像“???”试试这样 declare @Co

我尝试使用这个sql代码

    declare @resultSet Nvarchar(4000)

set @resultSet = 'SELECT 
      byng.Quantity * itm.Price N''السعر''

  FROM [Buying] byng
  inner join Item itm on byng.ItemId = itm.Id
  '
 exec(@resultSet)

列名总是以UTF编码显示,看起来像“???”

试试这样

declare @ColumnName Nvarchar(4000) = N'السعر'
declare @resultSet NVARCHAR(MAX)


SET @resultSet = N'SELECT byng.Quantity * itm.Price AS ' + @ColumnName
               + N' FROM [Buying] byng
                  inner join Item itm on byng.ItemId = itm.Id'

EXECUTE sp_executesql @resultSet
或者,您使用的方法也很好,但是您需要在Sql语句前面加上
N
前缀,因为您连接的是unicode字符,而不是在Sql字符串前面加上
N
,因此它不会被检测到

像这样的

DECLARE  @resultSet NVARCHAR(MAX)

SET @resultSet = N'SELECT  byng.Quantity * itm.Price AS ''السعر''
                   FROM [Buying] byng
                   inner join Item itm on byng.ItemId = itm.Id'

EXECUTE sp_executesql @resultSet

顺便说一句,与问题无关,这种查询不需要动态SQL,正常查询在符合条件时会更好。是的,我将尝试使用用例,而不是动态SQL。这不是一个问题,兄弟很乐意帮助:)