存储过程插入连接 table
Stored procedure insert into junction table
- Table#1:
Messages
(PK_ID,主题,消息)
- Table#2:Messages2Members(FK_MessageID、AuthorID、RecipientID)
为了处理多个消息收件人(即抄送),我的存储过程首先插入 tbl.Messages
,但要插入 tbl.Messages2Members
,我不确定是否必须创建用户定义的 table 获取 RecipientID
s,然后使用游标或循环 - 还是我缺少更简单的方法?
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 变得更加高效,但是,如果您的有效载荷是抄送邮件,我怀疑您是否会担心这一点。
- Table#1:
Messages
(PK_ID,主题,消息) - Table#2:Messages2Members(FK_MessageID、AuthorID、RecipientID)
为了处理多个消息收件人(即抄送),我的存储过程首先插入 tbl.Messages
,但要插入 tbl.Messages2Members
,我不确定是否必须创建用户定义的 table 获取 RecipientID
s,然后使用游标或循环 - 还是我缺少更简单的方法?
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 变得更加高效,但是,如果您的有效载荷是抄送邮件,我怀疑您是否会担心这一点。