将数据透视结果附加(插入)到现有 SQL 表中

Posted

技术标签:

【中文标题】将数据透视结果附加(插入)到现有 SQL 表中【英文标题】:Appending (insert into) pivot results into an existing SQL table 【发布时间】:2016-12-22 16:21:05 【问题描述】:

我有一个存储过程,它使用数据透视函数创建一个表(我们称之为表 A)。为了保持整洁,我创建了另一个过程,我希望将数据透视结果插入到表 A 中,但是插入到函数似乎不能与数据透视函数结合使用是否有人对如何工作有任何想法围绕这个?

此外,除了第二个过程的插入元素之外,这两个过程都可以正常工作。

脚本的枢轴元素如下:

INSERT INTO dbo.A
CAST([ColumnA] AS VARCHAR(500))
,ColumnB
,ColumnC
,ColumnD
,ColumnE
,Apr = IsNull([1],0)
,May = IsNull([2],0)
,Jun = IsNull([3],0)
,Jul = IsNull([4],0)
,Aug = IsNull([5],0)
,Sep = IsNull([6],0)
,Oct = IsNull([7],0)
,Nov = IsNull([8],0)
,[Dec] = IsNull([9],0)
,Jan = IsNull([10],0)
,Feb = IsNull([11],0)
,Mar = IsNull([12],0)
,YTD = IsNull([13],0)
From xx_CTE
PIVOT (
   Sum(value)
   For month in ([1],[2],[3],[4],[5],[6],[7],
            [8],[9],[10],[11],[12],[13])
) AS Summary

对于上述我得到...

(受影响的 39318 行)

(2883 行受影响)

(受影响的 3616 行)消息 8152,级别 16,状态 14,程序 usp_sproc1,第 109 行字符串或二进制数据将被截断。这 语句已终止。

(受影响的 1 行)

任何帮助将不胜感激。

谢谢

杰米

【问题讨论】:

请发布所有代码,包括 CTE 定义。 您的插入语句失败,因为 A-E 列中的某些内容不适合您的表,值太长。您需要增加表格中文本列的大小,或者只需将这些列的最左边的字符插入到列定义长度。枢轴只是让您感到困惑。 【参考方案1】:

选项 1。

您的目标表中的第一列短于 500。 将列数据截断到适当的大小或增加目标列大小。

选项 2。

您在导致问题的目标表上有triggers

【讨论】:

【参考方案2】:

感谢 cmets。我现在想通了,目标表中一列的字段大小是 varchar (8),我试图插入 9 个字符!我最终会到达那里。

干杯 杰米

【讨论】:

以上是关于将数据透视结果附加(插入)到现有 SQL 表中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中使用附加或同步方法在数据透视表中插入多个值

如何将 R 数据框插入到 SQL Server 中的现有表中

在数据透视表中附加数据时时间戳不更新

无法在不覆盖的情况下将 R 数据框附加到现有 Excel 中

Redshift 复制命令追加、替换或更新插入?

将 sql 数据从数据透视表存储过程导出到 excel