【发布时间】:2019-09-10 13:10:08
【问题描述】:
在我的数据仓库表中插入记录时遇到问题。我有一个代理键,它为每条记录创建自动递增 1。我收到错误消息:
表“TARGET”中标识列的显式值只能 在使用列列表并且 IDENTITY_INSERT 为 ON 时指定
下面的代码sn-p:
INSERT INTO [DW_Table] (Valid_Start_Date, Valid_End_Date, Current_Flag, Col1, Col2, Col3)
SELECT
Getdate() AS Valid_Start_Date, NULL AS Valid_End_Date, 1 as Current_Flag, Col1, Col2,Col3
FROM (
MERGE INTO [DW_Table] AS TARGET
USING ([Base_Table]) AS SOURCE
ON ( SOURCEC.Account_Key = TARGET.Account_Key
AND TARGET.Current_Flag = 1)
WHEN MATCHED .................................
我已尝试列出字段,因为我知道问题在于尝试将记录插入自动递增字段。我已将其作为“USING”基表行的一部分执行,但仍然出现错误。
有人可以指点一下吗?
谢谢
【问题讨论】:
-
您的插入列与所选列不匹配。
1 as Current_Flag将进入Col1进入插入列表。 -
IN 除了@WEI_DBA 指出的问题之外,您的 TARGET 表还有一个 IDENTITY 列,该列会自动生成该列的值。因此,您需要 a) 在 INSERT 中不包含该列,或者 b) 在错误状态下打开 IDENTITY_INSERT。可能是 A,但这取决于您的情况。
-
查询中有错字,所以我错过了 Insert Into 中的 Current_Flag。我现在已经修改了。我没有在 INSERT 中包含 IDENTITY 列,但我仍然得到同样的错误
-
任何触发器? WHEN MATCHED 之后发生了什么?您是否可以在不使用MERGE 的情况下执行此插入?甚至可以只用 INSERT 进行测试,看看 MERGE 语句是否有问题。
-
从 WHEN MATCHED 开始,我会检查我的字段以确定是否有任何行发生了变化。如果他们有我将 current_flag 设置为 0,插入一个新行并将其设置为当前。 INSERT 可以自己正常工作。看来这是 MERGE 的问题。
标签: sql-server data-warehouse scd2