【问题标题】:How to use identity column value of target table to insert in another column of same table如何使用目标表的标识列值插入同一表的另一列
【发布时间】:2014-09-19 04:37:44
【问题描述】:

如果问题的标题令人困惑,请原谅。表 E 是源,表 S 是目标。 S.SEA_ID 是标识列(int,非空)。只要这些连接条件是NOT MATCHED AND E.ACCT_NUM IS NULL,我就想在S.ACCT_NUM 列中插入值'EY|' + CAST(S.SEA_ID AS VARCHAR)。但是我收到了错误

无法绑定多部分标识符“S.SEA_ID”。

是否可以插入目标表的标识列值来填充同一目标表的另一列?如果在下面的 MERGE 语句中不可能,我的其他选择是什么?

MERGE INTO STG_EXTERNAL_ACCT S
USING ##EYDUPLICATES E
            ON E.COUNTERPARTY_NAME = S.COUNTERPARTY_NAME
            AND E.COUNTERPARTY_ADDRESS = S.COUNTERPARTY_ADDRESS
            AND E.COUNTERPARTY_STATE = S.COUNTERPARTY_STATE
            AND E.COUNTERPARTY_COUNTRY = S.COUNTERPARTY_COUNTRY
            AND E.COUNTERPARTY_CITY = S.COUNTERPARTY_CITY
WHEN NOT MATCHED AND ISNULL(E.ACCT_NUM,'')='' 
     THEN INSERT (ACCT_NUM, COUNTERPARTY_NAME, COUNTERPARTY_ADDRESS,
                  COUNTERPARTY_STATE, COUNTERPARTY_COUNTRY, COUNTERPARTY_CITY) 
          VALUES ('EY|' + CAST(S.SEA_ID AS VARCHAR),E.COUNTERPARTY_NAME,
                  E.COUNTERPARTY_ADDRESS, E.COUNTERPARTY_STATE, 
                  E.COUNTERPARTY_COUNTRY, E.COUNTERPARTY_CITY);

【问题讨论】:

    标签: sql sql-server insert merge identity-column


    【解决方案1】:

    我建议将 ACCT_NUM 列更改为计算列。

    ALTER Table STG_EXTERNAL_ACCT ALTER Column ACCT_NUM as 'EY|'+CAST(S.SEA_ID AS VARCHAR)
    

    您也可以在触发器中设置此列。

    Create Trigger TiggerName ON STG_EXTERNAL_ACCT 
    INSTEAD OF INSERT
    AS Begin
      Insert Into STG_EXTERNAL_ACCT (ACCT_Num, ...)
      Select 'EY|'+CAST(S.SEA_ID AS VARCHAR), ...
      From Inserted
    End
    

    【讨论】:

      猜你喜欢
      • 2012-06-23
      • 1970-01-01
      • 2016-02-21
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多