存储过程插入连接 table

Stored procedure insert into junction table

为了处理多个消息收件人(即抄送),我的存储过程首先插入 tbl.Messages,但要插入 tbl.Messages2Members,我不确定是否必须创建用户定义的 table 获取 RecipientIDs,然后使用游标或循环 - 还是我缺少更简单的方法?

P.S。 SCOPE_IDENTITY() 为新插入的 FK_MessageID

提供值

P.S.S.我可以自己研究代码,但只想确认最佳实践。 TIA

您可以将 UDT 发送到您的 SP,当然,有些人通常会选择逗号分隔的列表,尤其是在过滤数据时。对于后者,您可以将列表拆分为@RecipientIDs 以加入查询。

选项 1

CREATE PROCEDURE MessageInsert(…@RecipientIDTable RecipientIDTable)--Or more generically IntegerIDTable :)

选项 2

CREATE PROCEDURE MessageInsert(…@RecipientIDList NVARCHAR(MAX))
AS
    DECLARE @RecipientIDTable TABLE(RecipientID INT)
    INSERT @RecipientIDTable SELECT ID FROM dbo.MySpliterFunction(@RecipientIDList)

用法示例

@MessageID = @@IDENTITY

INSERT INTO Messages2Members (MessageID, FromID, RecipientID)
SELECT @MessageID, @FromID, R.RecipientID FROM @RecipientIDTable R

随着列表大小的增加,选项 1 变得更加高效,但是,如果您的有效载荷是抄送邮件,我怀疑您是否会担心这一点。