使用bcp的动态数据透视SQL查询给出“无法解决列级排序规则。BCP复制出失败”错误

时间:2019-08-02 19:03:49

标签: sql sql-server dynamic pivot bcp

我正在尝试使用动态sql将具有7列的表中的一列(“问题”)转换为几列(“问题”文本)。我要透视的一列的相应数据在单个列中(“答案”),但透视表中的列将在新列(问题文本)下方。我正在使用bcp将查询输出复制到文件中,并收到错误“无法解决列级排序规则。复制失败。”我该怎么办?

我在SQL Server代理作业中通过Powershell使用Microsoft Sql Server 17和bcp。我已经尝试使用动态sql来简单地选择列,而不是旋转表,并且得到相同的错误。 enter image description here 上面类似于我正在使用的表。我想将“问题”列分为4个单独的列,并在问题文本下方添加答案。由于ID相同,因此决赛桌应该有一行。

这是将“问题”列填充到单个列中的代码:

    DECLARE @cols nVARCHAR(MAX), @DynamicPivotQuery nVARCHAR(max); 
set @cols = STUFF((SELECT DISTinct ','+ QUOTENAME(Question) from db.testforpivot FOR XML PATH(''), TYPE).value('.', 'nVARCHAR(MAX)') ,1,1,'') 
select @cols;

给予:

enter image description here

这是动态数据透视表的代码:

SET @DynamicPivotQuery = 'SELECT Id,' + @cols+' ( select Id, name, user, extId, Question, score1 from db.testforpivot ) x pivot ( MAX(Answer)for Question in ('+@cols+')) as pivotResult' 
exec sp_executesql @DynamicPivotQuery

当我运行以下bcp命令时,出现上述错误:

bcp "SET QUOTED_IDENTIFIER ON
sql code above here" queryout C:\Users\ssingla\Documents\EvalExportLast24Hrs.txt -c  -t -T

我期望以下几点: enter image description here

等,答案旁边是分数

编辑8/3/19 感谢向我指出正确方向的人们。以下查询适用于MSSMS中的动态数据透视。现有说明中的主要缺失点是,在动态数据透视表中,需要将QUOTENAME产生的括号[[和']'替换为空字符串。我将在星期一测试bcp:

DECLARE @cols nVARCHAR(MAX),
@DynamicPivotQuery nVARCHAR(max);
select @cols = STUFF((SELECT DISTinct ','+ QUOTENAME(Question) from tempdb.dbo.test FOR XML PATH(''), TYPE).value('.', 'nVARCHAR(MAX)'),1,1,'')
select @cols;

SET @DynamicPivotQuery = 
'select *
from 
(
  select *
    from tempdb.dbo.test
) a
pivot
(
  max(Answer)
  for Question in ('+STUFF(REPLACE(REPLACE(@cols,'[', ''),']',''),1,1,'')+')
) p';
exec sp_executesql @DynamicPivotQuery

0 个答案:

没有答案