SQL - 尝试添加IDENTITY但连接表已有ID

时间:2016-02-23 13:59:57

标签: sql sql-server add identity

我正在尝试使用伪造银行名称表中的随机银行名称更新邮件表。问题是邮件表已经包含一个标识字段,所以我收到了错误

  

为表'generic_banks'指定了多个标识列。每个表只允许一个标识列。

这是我的代码:

ALTER TABLE generic_banks ADD ID_new INT NOT NULL IDENTITY(1,1)

CREATE UNIQUE NONCLUSTERED INDEX ix ON generic_banks(ID_new)

UPDATE m
SET m.alias = b.bank_alias
FROM mail_detail_lz m
INNER LOOP JOIN generic_banks b ON b.ID_new = (1 +  ABS(CRYPT_GEN_RANDOM(8)%50000))

请帮忙

2 个答案:

答案 0 :(得分:0)

如果您想将一个表中的随机名称分配给另一个表,我可能会建议更像这样的内容:

with toupdate as (
      select m.*, row_number() over (order by newid()) as seqnum
      from mail_detail_lz m
     ),
     gb as (
      select gb.*, row_number() over (order by newid()) as seqnum
      from generic_banks gb
    )
update toupdate
    set alias = gb.bank_alias
    from toupdate join
         gb
         on toupdate.seqnum = gb.seqnum;

这是一种不允许重复的通用方法。如果它不适合你,那么类似的东西应该有效。

答案 1 :(得分:0)

每个表只能创建一个标识列。 MS Link

您需要创建ID_new字段作为非标识字段或删除现有标识字段。