将存储过程插入联结表

时间:2018-12-08 02:01:51

标签: sql-server stored-procedures junction-table

  • 表#1:Messages(PK_ID,主题,消息)
  • 表#2:Messages2Members(FK_MessageID,AuthorID,RecipientID)

要处理多个消息收件人(即CC的收件人),我的存储过程首先插入tbl.Messages,但是要插入tbl.Messages2Members,我不确定是否必须创建用户定义的表才能使用{ {1}} s,然后使用游标或循环-还是我缺少一种更简单的方法?

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

提供价值

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

1 个答案:

答案 0 :(得分:0)

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

选项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的性能变得更高,但是,我怀疑您是否会担心如果您的有效负载是消息的抄送。