Вставить хранимую процедуру в распределительную таблицу - PullRequest
0 голосов
/ 08 декабря 2018
  • Таблица № 1: Messages (PK_ID, Тема, Сообщение)
  • Таблица № 2: Messages2Members (FK_MessageID, AuthorID, RecipientID)

Для обработки несколькихПолучатели сообщений (т.е. CC) моя хранимая процедура сначала вставляет в tbl.Messages, но чтобы вставить в tbl.Messages2Members, я не уверен, должен ли я создать пользовательскую таблицу, чтобы взять RecipientID s, затем использовать курсор или цикл- или есть более простой способ, который я пропускаю?

PS SCOPE_IDENTITY() предоставляет значение для недавно вставленного FK_MessageID

PSS Я могу исследовать код самостоятельно, но просто хочу получить подтверждение передовой практики.ТИА

1 Ответ

0 голосов
/ 08 декабря 2018

Вы можете отправить 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 становится более производительным по мере увеличения размера списка, однако я сомневаюсь, что вы когда-нибудь будете этим обеспокоены, если ваша полезная нагрузка будет CC для сообщения.

...