存储过程插入到连接表中


  • 表#1:Messages(PK_ID,主题,消息(
  • 表2:消息2成员(FK_MessageID、AuthorID、RecipientID(

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

p.S.SCOPE_IDENTITY()为新插入的FK_MessageID提供值

附言:我可以自己研究代码,但只想确认最佳实践。TIA-

您可以向SP中发送UDT,当然,有些人有时会选择逗号分隔的列表,尤其是在筛选数据时。对于后者,您可以将列表拆分为@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变得更具性能,然而,如果您的有效负载是消息的CC,我怀疑您是否会担心这一点。

相关内容

  • 没有找到相关文章

最新更新