合并语句(T-SQL)不插入任何行,抛出错误,指出不允许身份插入

问题描述 投票:0回答:1

我构建了一个

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
更新声明的一部分,但它不起作用。

sql sql-server t-sql
1个回答
0
投票

您可以删除以下内容并尝试: SET IDENTITY_INSERT dim.customer_crm 打开 SET IDENTITY_INSERT dim.customer_crm 关闭

© www.soinside.com 2019 - 2024. All rights reserved.