0

有一个用户表。

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 等等。

4

3 回答 3

4

如果在select中不指定列,所有列都会出现,包括命令Id中没有指定的列insert

这是你应该做的:

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

现在,请原谅我的坦率,但错误信息实际上是不言自明的。

于 2012-08-21T17:54:53.093 回答
1
    INSERT INTO [User] ([OID],[Name],[Surname],[Address])  
    SELECT [OID],[Name],[Surname],[Address] FROM [User] Where OID = 24

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

于 2012-08-21T17:55:18.740 回答
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的查询部分中时。

于 2012-08-21T17:56:01.683 回答