重复的记录考虑下面的设计:与标识列
Company TABLE (
CompanyId int NOT NULL IDENTITY PRIMARY KEY,
CompanyName nvarchar(max))
Product TABLE (
ProductId int NOT NULL IDENTITY PRIMARY KEY,
CompanyId int NOT NULL,
ProductName nvarchar(max))
ProductPart TABLE (
ProductPartId int NOT NULL IDENTITY PRIMARY KEY,
ProductId int NOT NULL,
ProductPartName)
我需要复制一个公司(含CompanyId == @companyId
)数据,以便它将包含完全相同的数据。
第一步是显而易见的:
INSERT INTO Company(CompanyName)
SELECT @newCompanyName
FROM Company
WHERE CompanyId = @companyId
DECLARE @newCompanyId = SCOPE_IDENTITY()
没有ProductPart
表这将是微不足道的复制Product
数据以及:
INSERT INTO Product (ProductName)
SELECT ProductName
FROM Product
WHERE CompanyId = @companyId
但为了正确地复制ProductPart
数据,我需要有新老公司之间的产品映射数据。
我试图用OUTPUT
条款但遗憾的是它不支持我的方案:
DECLARE @productRemap TABLE (OldProductId int NOT NULL, NewProductId int NOT NULL PRIMARY KEY)
INSERT INTO Product (ProductName)
OUTPUT ProductId, inserted.ProductId
INTO @productRemap
SELECT ProductName
FROM Product
WHERE CompanyId = @companyId
-- Invalid column name 'ProductId'.
有什么办法将数据复制正确不涉及游标?
如果您使用SQL Server 2008,则可以使用'merge'代替。看看这个问题http://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping-between-source-id-and-target-id。 –