我构建了一个
MERGE
语句来插入和更新维度表 (Customer
),该表具有此表结构中显示的标识列:
-- Create the table in the specified schema
CREATE TABLE [dim].[customer_crm]
(
[customer_skey] INT identity (1,1), -- Primary Key column
customer_number nvarchar(100) NULL,
customer_name NVARCHAR(450) NULL,
customer_address NVARCHAR(500) NULL,
post_code nvarchar (150) NULL,
state nvarchar ( 150 ) NULL,
country nvarchar ( 100) NULL,
ABN nvarchar (100) NULL,
contact_no nvarchar(50) NULL,
email nvarchar(200) NULL,
is_parent varchar(4) NULL,
parent_customer_number varchar (10) NULL,
dw_insert_timestamp DATETIME NULL
-- Specify more columns here
)
WITH
(
DISTRIBUTION = HASH ( customer_number ), --(hash distributed table on this Id column)
CLUSTERED COLUMNSTORE INDEX
)
这是我的
MERGE
声明:
SET IDENTITY_INSERT dim.customer_crm on
GO
MERGE INTO dim.customer_crm AS tgt
USING (SELECT
accountnumber, name,
ISNULL(address1_line1, '') + ',' + ISNULL(address1_line2, '') + ', ' + ISNULL(address2_city,'') AS address,
LEFT(address1_postalcode, 5) AS post_code,
address1_stateorprovince, address2_country AS country,
emailaddress1 AS email, new_abn AS abn, telephone1 AS telephone,
CASE WHEN parentaccountid IS NULL THEN 'n' ELSE 'y' END AS is_parent
FROM
src.crm_account a
WHERE
statuscode = 1) src ON (tgt.customer_number = src.accountnumber)
WHEN MATCHED
THEN
UPDATE
SET
customer_number = src.accountnumber,
customer_name = src.Name,
customer_address = src.address,
post_code = src.post_code,
country = src.country,
email = src.email,
abn = src.abn,
contact_no = src.telephone,
is_parent = src.is_parent
WHEN NOT MATCHED
THEN
INSERT (customer_number, customer_name, customer_address, post_code, country, email, abn, contact_no, is_parent )
VALUES (src.accountnumber, src.name, src.address, src.post_code, src.country, src.email, src.abn, src.telephone, src.is_parent );
SET IDENTITY_INSERT dim.customer_crm off
但是这不会插入任何行,并抛出错误:
消息 8102,第 16 级,状态 1,第 1 行
无法更新身份列“customer_skey”。
Customer_skey
不是 MERGE
语句的一部分,它是一个标识列。
请帮助解决这个问题,尽管
Customer_skey
不是 MERGE
更新声明的一部分,但它不起作用。
您可以删除以下内容并尝试: SET IDENTITY_INSERT dim.customer_crm 打开 SET IDENTITY_INSERT dim.customer_crm 关闭