- 表#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,我怀疑您是否会担心这一点。