我想从不同的表中复制数据,同时保持彼此之间不同的链接。从table1复制条目,然后从table2复制条目与table1外键
简化我的表的结构:
timetable (pk INT PRIMARY KEY IDENTITY(1,1), name VARCHAR(50))
timetable_group (pk INT PRIMARY KEY IDENTITY(1,1), timetable_fk INT, name VARCHAR(50))
timetable_class (pk INT PRIMARY KEY IDENTITY(1,1), timetable_fk INT, timetable_group_fk INT, name VARCHAR(50))
我的目标是能够时间表的条目与所有timetable_group和timetable_class内的相关条目的复制。复制timetable_class
当
如何从timetable_group
复制并取回插入PKS能够使用它们:
与INSERT
和@@IDENTITY
得到@new_timetable_fk
后,我打我的问题呢?
我尝试使用这样的:
-- This is a parameter to my code
DECLARE @timetable_fk INT
SET @timetable_fk = 1
-- start of my Stored Procedure
-- this will hold my new timetable_fk
DECLARE @new_timetable_fk INT
-- this will hold the old and new pks of timetable_group
-- so we can join on it
DECLARE @timetable_group_link_pks TABLE (new_pk INT, old_pk INT)
-- copy the timetable entry
INSERT INTO timetable (name)
SELECT LEFT(name + ' copy', 50)
FROM timetable
WHERE pk = @timetable_fk
-- get the pk of the newly inserted value
SET @new_timetable_fk = @@IDENTITY
-- copy timetable_group
INSERT INTO timetable_group (timetable_fk, name)
-- This return the error `The multi-part identifier "g.pk" could not be bound`
OUTPUT inserted.pk, g.pk
INTO @timetable_group_link_pks
SELECT @new_timetable_fk, g.name
FROM timetable_group g
WHERE g.timetable_fk = @timetable_fk
-- copy timetable class
INSERT INTO timetable_class (timetable_fk, timetable_group_fk, name)
SELECT @new_timetable_fk, gl.new_pk, c.name
FROM timetable_class c
JOIN @timetable_group_link_pks gl ON c.timetable_group_fk = gl.old_pk
WHERE c.timetable_fk = @timetable_fk
但正如我不能OUTPUT子句中使用g.pk这是行不通的。
MSDN告诉我们OUTPUT子句应该按我的意思工作,但TSQL不接受它。
任何想法如何解决这个问题?
我把我在代码中的注释得到了错误。 无法绑定多部分标识符“g.pk” –