1

我有两张桌子:

新表

编号 | 父母身份 | f1 | f2 | 客户ID

initial_table(没有 customerid)

编号 | 父母身份 | f1 | f2

我需要做的是将所有项目从 initial_table 移动到 new_table。但是,新表中的 id 更改(自动生成)!

--

所以,我的想法(现在)是:

1 - 将除initial_table之外的所有数据移动到idnew_tableparentid

2 - 使用lookup_table

编号 | 原始父母ID | 新父母ID | 客户ID

3 - 浏览 lookup_table 并用 new 更新 new_table parentidparentid

--

所以...

问题 - 1 - 这是正确的方法吗?

问题 - 2a - 如果是,该怎么做?

问题 - 2b - 如果没有,那怎么办?

2 中的问题是我是通过触发器执行此操作的,customerid并且SELECT @customerid = id FROM inserted这很好。那我在做

INSERT INTO new_table (f1, f2, customerid)
SELECT f1, f2 @customerid FROM initial_table

但是当我这样做时,我没有从 new_table 获得新的 ID。

--

所以,请帮我写这个触发器:

我需要将所有数据从initial_table复制到new_table,问题是id会改变,我需要在new_table中相应地更新parentid

谢谢

--

这是我当前的触发器:

ALTER TRIGGER Copy
ON dbo.Customers

FOR INSERT
AS

BEGIN TRANSACTION

/* variables */
DECLARE
    @customerid bigint

SELECT @customerid = id FROM inserted

/* insert all for this customer */
INSERT INTO new_table (f1, f2, customerid)
    SELECT f1, f2 @customerid FROM initial_table

/* TODO: add entries to lookup table */

/* TODO: fix the pages' parentid's */

/* execute */
COMMIT TRANSACTION

GO
4

1 回答 1

3

我会IDENTITY INSERT关闭初始插入并避免整个混乱。你有什么理由不能这样做吗?这样的事情应该这样做:

SET IDENTITY_INSERT dbo.Customers ON

然后当你完成后,只需运行

SET IDENTITY_INSERT dbo.Customers OFF
于 2012-05-18T16:51:49.200 回答