有一个用户表。
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等。
答案 0 :(得分:4)
如果未在select中指定列,则所有列都会出现,包括Id
,insert
命令中未指定。
这是你应该做的:
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
部分中包含该字段。