插入时有超过1个项目

时间:2012-08-21 17:53:05

标签: sql

有一个用户表。

Id    Name    Surname     Address     OID
1     n1      s1          a1          24
2     n2      s2          a2          24
3     n3      s3          a3          24
4     n4      s4          a4          12

我想复制OID = 24的行。我在下面写了查询,但是我收到了错误。

INSERT INTO [User] ([OID],[Name],[Surname],[Address]) SELECT * FROM [User] Where OID = 24

错误:

  

INSERT语句的选择列表包含的项目多于   插入列表。 SELECT值的数量必须与数量匹配   INSERT列。

如何插入这些行没有错误?此外,我不知道有多少记录将从SELECT语句返回,有时它可能是1,有时是5,有时是15等。

3 个答案:

答案 0 :(得分:4)

如果未在select中指定列,则所有列都会出现,包括Idinsert命令中未指定。

这是你应该做的:

INSERT INTO [User] ([OID],[Name],[Surname],[Address]) 
SELECT              [OID],[Name],[Surname],[Address] 
FROM [User] Where OID = 24

现在,原谅我的坦诚,但错误信息实际上是非常自我解释的。

答案 1 :(得分:1)

    INSERT INTO [User] ([OID],[Name],[Surname],[Address])  
    SELECT [OID],[Name],[Surname],[Address] FROM [User] Where OID = 24

您的select *正在检索5 fields,但您只能insert 4。 因此,您必须fields插入

答案 2 :(得分:1)

由于您使用SELECT,因此SELECT *语句中的列太多了。您应该指定要选择的列:

INSERT INTO [User] ([OID],[Name],[Surname],[Address]) 
SELECT OID, name, Surname, Address 
FROM [User] 
Where OID = 24

这就是为什么指定所需的列比使用SELECT *

更好的原因

当您SELECT *时,您还获得了Id字段,但未在查询的INSERT INTO部分中包含该字段。

相关问题