在SQL server中,我尝试使用以下查询将值从一个表插入到另一个表中:
delete from tblTable1
insert into tblTable1 select * from tblTable1_Link
我收到以下错误:
列名或提供的数量 值与表不匹配 定义
我确信这两个表都具有相同的结构,列名和相同的数据类型。
感谢您的帮助。我已经尝试将此帖子发布到sqlsvrtip,但我没有得到回应,所以我会尝试在这里尝试更多的活动。
答案 0 :(得分:2)
其中一列是IDENTITY列吗?
SET IDENTITY_INSERT tblTable1 ON
insert into tblTable1 select * from tblTable1_Link
SET IDENTITY_INSERT tblTable1 OFF
答案 1 :(得分:1)
请你在数据库中运行这个语句并给我们输出??
SELECT
c.name,
c.is_identity,
c.is_computed,
t.name 'Type name'
FROM sys.columns c
INNER JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE object_id = object_ID('tblTable1')
问题:
is_identity
设为1(真)?is_computed
设为1(真)?timestamp
或rowversion
?? 如果您有任何这些列:您无法在INSERT
语句中轻松设置其中任何一列。您可以使用一些额外的工作设置标识列,但在任何情况下都无法设置TIMESTAMP
/ ROWVERSION
类型的计算列或列
这就是为什么我建议始终明确指定列的列表 - 即使您需要所有列:
INSERT INTO dbo.tblTable1(col1, col2, ...., colX)
SELECT col1, col2, ...., colX FROM dbo.tblTable1_Link
使用这种方法,您可以省去任何无法轻易插入的列...
答案 2 :(得分:0)
+1 @Fosco,因为这很可能就是答案。
但需要注意的是,如果您只是缓存链接表并因此每次清空它,那么您可以执行以下操作:
DROP TABLE tblTable1 -- assuming there are no FKs
select * INTO tblTable1 from tblTable1_Link
-- Then Re-create keys / indexes
这意味着如果tblTable1_Link的架构发生变化,那么该更改也将在目标表中。