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

42 sql t-sql sql-server sql-server-2005

在SQL Server中,我尝试使用以下查询将值从一个表插入另一个表:

delete from tblTable1

insert into tblTable1 select * from tblTable1_Link
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

列名或提供的值数与表定义不匹配.

我确信这两个表具有相同的结构,相同的列名和相同的数据类型.

请帮忙!

gbn*_*gbn 40

他们没有相同的结构......我可以保证他们是不同的

我知道你已经创建了它...... 数据库中已经有一个名为'tbltable1'的对象

你可能想要的是这个(这也解决了你的另一个问题):

Drop table tblTable1

select * into tblTable1 from tblTable1_Link
Run Code Online (Sandbox Code Playgroud)


Adr*_*der 20

对于插入,最好指定列名,请参阅以下内容

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX)
)

INSERT INTO @Table SELECT '1'
Run Code Online (Sandbox Code Playgroud)

工作正常,更改表def以导致错误

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX),
        Val2 VARCHAR(MAX)
)

INSERT INTO @Table SELECT '1'
Run Code Online (Sandbox Code Playgroud)

消息213,级别16,状态1,行6插入错误:列名称或提供的值的数量与表定义不匹配.

但改变上面的

DECLARE @Table TABLE(
        Val1 VARCHAR(MAX),
        Val2 VARCHAR(MAX)
)

INSERT INTO @Table (Val1)  SELECT '1'
Run Code Online (Sandbox Code Playgroud)

作品.您需要更具体地指定列

提供结构,我们可以看看


小智 15

这是一篇较老的帖子,但我还想提一下,如果你有类似的东西

insert into blah
       select * from blah2
Run Code Online (Sandbox Code Playgroud)

和blah和blah2完全相同,请记住,计算列会抛出同样的错误......

我刚刚意识到,当上述失败时,我试过了

insert into blah (cola, colb, colc)
       select cola, colb, colc from blah2
Run Code Online (Sandbox Code Playgroud)

在我的例子中,它是fullname字段(从第一个和最后一个计算,等等)


小智 9

问题是您尝试在不使用列的情况下将数据插入数据库.Sql server为您提供该错误消息.

错误:insert into users values('1', '2','3')- 只要您只有3列,这就可以正常工作

如果你有4列,但只想插入3列

正确: insert into users (firstName,lastName,city) values ('Tom', 'Jones', 'Miami')

希望这可以帮助


小智 8

谨防触发因素。也许问题在于触发器中对插入行的某些操作。