Sql server 在MS SQL Server 2005中使用Pivot转换时出错

Sql server 在MS SQL Server 2005中使用Pivot转换时出错,sql-server,ssis,pivot,Sql Server,Ssis,Pivot,我有以下我正在旋转的表格: ID、名称、值 1,‘任务ID’,123 1、‘语言’、‘Java’ 2,“任务ID”,456 我已将数据透视键设置为“名称”列,将“数据透视值”设置为“值”列。对于我的每个新列Task ID和Language,我已将它们的PivotKeyValue分别设置为“Task ID”和“Language”。我的软件包使用上述数据运行良好,pivot操作的结果是: 任务ID,任务ID,语言 1123,“Java” 2456,零 但是,当我在以下源数据上运行包时,我遇到了问题:

我有以下我正在旋转的表格:

ID、名称、值

1,‘任务ID’,123

1、‘语言’、‘Java’

2,“任务ID”,456

我已将数据透视键设置为“名称”列,将“数据透视值”设置为“值”列。对于我的每个新列Task ID和Language,我已将它们的PivotKeyValue分别设置为“Task ID”和“Language”。我的软件包使用上述数据运行良好,pivot操作的结果是:

任务ID,任务ID,语言

1123,“Java”

2456,零

但是,当我在以下源数据上运行包时,我遇到了问题:

ID、名称、值

1,空,空

2,空,空

我收到的错误消息是:

[Pivot[4511]]错误:无法转换为字符串的Pivot键值无效。 [DTS.Pipeline]错误:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件Pivot 4511上的ProcessInput方法失败,错误代码为0xC0202090。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但该错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关故障的更多信息

我认为这意味着pivot操作无法处理PivotKey列“Name”中的NULL值,因为它尚未配置为处理该值。问题是我不知道怎么做。如何检测和处理输出列“Input and Output Properties”表单的PivotKeyValue属性中的空值


感谢您的时间。

空值会导致问题,因为您无法将表或结果集的列名设置为空值,而PIVOT运算符正试图这样做。您必须对预透视或未透视的数据使用ISNULL运算符

ISNULL,
通常您会执行类似ISNULLvalue,0的操作。

我可以使用以下脚本重新创建您的初始位置:

创建表DataTableId INT,名称Nvarchar40,值Nvarchar40

插入数据表值1,'TaskID','123' 插入数据表值1,“语言”,“Java” 插入数据表值2,'TaskID','456'

选择id、[TaskID]、[Language] 从…起 从DataTable中选择ID、[Name]、[Value] 作为s 支点 [TaskID]、[Language]中[Name]的最大值为p

删除表数据表

结果:

任务id语言 1123爪哇 2456空

然而,当我跑步时:

创建表DataTableId INT,名称Nvarchar40,值Nvarchar40

插入数据表值1,NULL,NULL 插入数据表值2,NULL,NULL

选择id、[TaskID]、[Language] 从…起 从DataTable中选择ID、[Name]、[Value] 作为s 支点 [TaskID]、[Language]中[Name]的最大值为p

删除表数据表

结果:

任务id语言 1空 2空

这执行起来很好


我想我一定是遗漏了您正在做的事情?

如果您发布一些代码来复制您的问题,其他人将更容易测试/帮助。