Messages
(PK_ID,主题,消息)要处理多个消息收件人(即CC的收件人),我的存储过程首先插入tbl.Messages
,但是要插入tbl.Messages2Members
,我不确定是否必须创建用户定义的表才能使用{ {1}} s,然后使用游标或循环-还是我缺少一种更简单的方法?
P.S。 RecipientID
为新插入的SCOPE_IDENTITY()
P.S.S。我可以自己研究代码,但只想确认最佳实践。 TIA
答案 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的性能变得更高,但是,我怀疑您是否会担心如果您的有效负载是消息的抄送。