拼接SQL显示汉字问题

拼接SQL显示汉字问题,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有下面的SQL脚本,我希望交叉应用来选择中文列名 CREATE TABLE #temp([color] varchar(5), [size] varchar(5),[AQty] varchar(10),[BQty] varchar(10),[CQty] varchar(10),[DQty] varchar(10)); INSERT INTO #temp([color], [size], [AQty], [BQty],[CQty],[DQty]) VALUES ('

我有下面的SQL脚本,我希望交叉应用来选择中文列名

CREATE TABLE #temp([color] varchar(5), [size] varchar(5),[AQty] varchar(10),[BQty] varchar(10),[CQty] varchar(10),[DQty] varchar(10));
    
    INSERT INTO #temp([color], [size], [AQty], [BQty],[CQty],[DQty])
    VALUES   ('A1', 'L','1','2','3','4')
           , ('A1', 'M','1','2','3','4')
           , ('A1', 'S','1','2','3','4')
           , ('A1', 'XL','1','2','3','4')
           , ('B1', 'L','1','2','3','4')
           , ('B1', 'M','1','2','3','4')
           , ('B1', 'S','1','2','3','4')
           , ('B1', 'XL','1','2','3','4')
           , ('B1', 'XXL','1','2','3','4')
           , ('C1', 'L','1','2','3','4')
           , ('C1', 'S','1','2','3','4')
    
    declare @cols as varchar(max), @sql varchar(max)
    select @cols = STRING_AGG(col, ', ') from (
        select distinct QUOTENAME(size) as col from #temp
    ) as t
    
    set @sql = '
    select color, col as total, ' + @cols + '
    from(
        select color, size, col, [value]
        from #temp
        cross apply (
        select ''总数一'', cast(AQty as varchar(10)) union all
        select ''总数二'', cast(BQty as varchar(10)) union all
        select ''总数三'', cast(CQty as varchar(10)) union all
        select ''总数四'', cast(DQty as varchar(10)) 
        ) c(col, [value])
    ) d
    pivot
    (
      max(value)
      for size in (' + @cols + ')
    ) piv
    order by color, total
    '
    exec(@sql)
color   total   L   M   S   XL  XXL
A1       ???    4   4   4   4   NULL
B1       ???    4   4   4   4   4
C1       ???    4   NULL4   NULLNULL
但现在,当我希望显示中文列名时,execsql显示混乱

CREATE TABLE #temp([color] varchar(5), [size] varchar(5),[AQty] varchar(10),[BQty] varchar(10),[CQty] varchar(10),[DQty] varchar(10));
    
    INSERT INTO #temp([color], [size], [AQty], [BQty],[CQty],[DQty])
    VALUES   ('A1', 'L','1','2','3','4')
           , ('A1', 'M','1','2','3','4')
           , ('A1', 'S','1','2','3','4')
           , ('A1', 'XL','1','2','3','4')
           , ('B1', 'L','1','2','3','4')
           , ('B1', 'M','1','2','3','4')
           , ('B1', 'S','1','2','3','4')
           , ('B1', 'XL','1','2','3','4')
           , ('B1', 'XXL','1','2','3','4')
           , ('C1', 'L','1','2','3','4')
           , ('C1', 'S','1','2','3','4')
    
    declare @cols as varchar(max), @sql varchar(max)
    select @cols = STRING_AGG(col, ', ') from (
        select distinct QUOTENAME(size) as col from #temp
    ) as t
    
    set @sql = '
    select color, col as total, ' + @cols + '
    from(
        select color, size, col, [value]
        from #temp
        cross apply (
        select ''总数一'', cast(AQty as varchar(10)) union all
        select ''总数二'', cast(BQty as varchar(10)) union all
        select ''总数三'', cast(CQty as varchar(10)) union all
        select ''总数四'', cast(DQty as varchar(10)) 
        ) c(col, [value])
    ) d
    pivot
    (
      max(value)
      for size in (' + @cols + ')
    ) piv
    order by color, total
    '
    exec(@sql)
color   total   L   M   S   XL  XXL
A1       ???    4   4   4   4   NULL
B1       ???    4   4   4   4   4
C1       ???    4   NULL4   NULLNULL
我试着这样更改它,更改变量
nvarchar
,用
N
设置
@sql
,用
N
更改交叉应用选择,但现在不起作用

        declare @cols as nvarchar(max), @sql nvarchar(max)
        set @sql = N'
        select color, col as total, ' + @cols + '
        from(
            select color, size, col, [value]
            from #temp
            cross apply (
            select N''总数一'', cast(AQty as varchar(10)) union all
            select N''总数二'', cast(BQty as varchar(10)) union all
            select N''总数三'', cast(CQty as varchar(10)) union all
            select N''总数四'', cast(DQty as varchar(10)) 
            ) c(col, [value])
        ) d
        pivot
        (
          max(value)
          for size in (' + @cols + ')
        ) piv
        order by color, total
        '
        exec(@sql)

我通过在
+@cols+
之后添加
N
解决了我的问题

declare @cols as nvarchar(max), @sql nvarchar(max)
set @sql = N'
select color, col as total, ' + @cols + N'
from(
    select color, size, col, [value]
    from #temp
    cross apply (
    select N''总数一'', cast(AQty as varchar(10)) union all
    select N''总数二'', cast(BQty as varchar(10)) union all
    select N''总数三'', cast(CQty as varchar(10)) union all
    select N''总数四'', cast(DQty as varchar(10)) 
    ) c(col, [value])
) d
pivot
(
  max(value)
  for size in (' + @cols + ')
) piv
order by color, total
'
exec(@sql)

您需要在控制面板中安装语言包