Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在稀疏表SQL中插入数据时出错_Sql Server_Tsql_Pivot_Sql Insert - Fatal编程技术网

Sql server 在稀疏表SQL中插入数据时出错

Sql server 在稀疏表SQL中插入数据时出错,sql-server,tsql,pivot,sql-insert,Sql Server,Tsql,Pivot,Sql Insert,我试图在SQL范围的表(稀疏表)上运行insert查询,但出现错误: “提供的值的列名或数目与表定义不匹配” 查询: Insert [dbo].[Table1] (Table1 is a sparse table) select id, [A],[B], [C], [D], [E] from ( Select ID, CategoryId, 1 as Flag From dbo.table2 ) a P

我试图在SQL范围的表(稀疏表)上运行insert查询,但出现错误:

“提供的值的列名或数目与表定义不匹配”

查询:

Insert [dbo].[Table1] (Table1 is a sparse table)
select id, [A],[B], [C], [D], [E] from (
Select  ID, 
            CategoryId, 
            1 as Flag
            From dbo.table2 
       ) a Pivot(Avg(Flag) For CategoryID In (
        [A],
        [B],
        [C],
        [D],
        [E]
           )) As PivotTable
我能够对普通sql表运行查询,但对稀疏表运行查询失败。我真的非常感谢你在这方面的帮助

提前感谢

您应该:

  • 创建一个
    INSERT
    语句,明确列出它将插入的列-假设
    ID
    可能是
    IDENTITY
    列 您不想/无法插入的

  • 定义要填入这些列的值的确切数目

INSERT语句应该类似于:

insert into table_1 (cola, colb, colc)
       select cola, colb, colc from table_2
插入tb1值('1'、'2'、'3')
-只要您只有3列就可以了

如果您有4列,但只想插入其中3列。 您必须在
插入到

   insert into tb1 (Col1,col2,col3) select col1, col2, col3 from tb_2

注意:始终明确定义
INSERT
语句应将数据填入的列列表

查询中是否确实有
(表1是稀疏表)
?如果这应该是一条注释,那么应该在它前面加上
--
,或者将它完全从代码块中取出。查询返回6列。由于没有指定要插入的列,因此它假定您正在尝试插入所有列。如果有超过6列,您将得到此错误。它是否是稀疏表并不重要。列出要填充的列,或者在查询中返回足够的列以填充所有列(可以对其他列值使用
NULL
)。不要在没有列列表的情况下使用insert语句。欢迎使用堆栈溢出。与其他问答网站相比,这样做的诸多好处之一是,任何人都可以编辑问题,这意味着问题可以改进。你的问题不仅对你有价值,对其他人也有潜在的价值,但如果它干净、简洁、格式良好,并且符合中列出的标准,那么它的价值就会大得多。marc_不久前做了一次编辑,这改进了你的问题,但是你把编辑退回去了,为什么这可能不再完全是“你的”问题,但本质是一样的,答案也是一样的。在tb1值中插入('1','2','3')-只要你只有3列就行-注意,如果你有4列,其中一列是一个标识,这也行得通,但我全力支持明确说明这些列,否则,如果添加了列,insert语句将中断。