我有两个需要更新的表,Master和Identifiers:
主
--MasterID(PK)
--ModifiedDate
--ModifiedBy
标识符
--IdentifierID
--MasterID(FK to Master)
--Identifier
--IdentifierType
--ModifiedDate
--ModifiedBy
Master表存在的唯一理由是将不同的标识符绑定到一个人身上。
我收到一个文件,其中包含需要插入标识符的新标识符信息(MasterID(如果可用),Identifier,IdentifierType)。具有MasterID的记录显然很容易插入;但是,没有一个的记录有点困难。
在将数据插入Identifiers表之前,必须生成一个新的MasterID,因此它可以用作FK。
我当时认为存储过程可能会有效:
DECLARE @IDOutput INT
INSERT INTO Master
(
ModifiedDate,
ModifiedBy
)
VALUES
(
GETDATE(),
'Robert'
)
SET @IDOutput = SCOPE_IDENTITY()
INSERT INTO Identifiers
(
MasterID,
Identifier,
IdentifierType,
ModifiedDate,
ModifiedBy
)
VALUES
(
@IDOutput,
Identifier, --this comes from input file
IdentifierType, --this comes from input file
GETDATE(),
'Robert'
)
我的问题是如何为输入文件中的每条记录运行此存储过程。我已经读过,使用游标,存储过程中的存储过程或临时表可能是处理此问题的方法,但我不确定使用这些方法之一实现此方法的最佳方法。实际上,我不确定我是否会以正确的方式解决这个问题。
对此有任何帮助将不胜感激!
答案 0 :(得分:1)
假设您有登台表,您可以使用OUTPUT子句
捕获许多密钥因此,您不是循环,而是从登台表中选择“主”行并插入,将新密钥存储在表变量中。然后使用它来填充子表。
这样的事情:
INSERT INTO Master (ModifiedDate, ModifiedBy, foo)
OUTPUT Inserted.MasterID, Inserted.ModifiedBy INTO @NewKeys
SELECT DISTINCT GETDATE(), 'Robert' FROM StagingTable
INSERT INTO Identifiers
(
MasterID,
Identifier,
IdentifierType,
ModifiedDate, ModifiedBy
)
SELECT
N.MasterID,
S.Identifier, --this comes from input file
S.IdentifierType, --this comes from input file
GETDATE(), N.ModifiedBy
FROM
StagingTable S
JOIN
@NewKeys N ON S.ModifiedBy = N.ModifiedBy
我不得不说:你的架构是否存在。主表几乎没有用处......