Как перевести этот C # -подобный код в хранимую процедуру SQL Server - PullRequest
0 голосов
/ 31 мая 2011

Ниже приведен псевдокод для хранимой процедуры SQL Server, который мне нужно написать:

int[] followers = (select FollowerID from StoreFollower where StoreId = @storeId)

insert into Message (senderId, recipientId)
values (@senderId, followers[0])

int rootMessageId = last_id()

foreach (int follower in followers.Skip(1))
    insert into Message (senderId, recipientId, rootMessageId)
    values (@senderId, follower, rootMessageId

Он получает все идентификаторы подписчика Store, создает запись в Message для первой.Затем он создает Message для каждого последующего идентификатора подписчика, в котором также указывается идентификатор первой Message записи в пакете.

Мне нужно преобразовать это в хранимую процедуру SQL Server, однако я никогда не писал ее раньшетак что я колеблюсьДолжен ли я использовать table переменную для хранения select результата?Должен ли я использовать массивы?Что ближе всего соответствует foreach здесь?Как мне вырезать первый элемент?

Я был бы очень признателен за эскиз такого процесса, просто чтобы знать, что посмотреть дальше.

1 Ответ

2 голосов
/ 31 мая 2011

Мой удар в этом в T-SQL. Я предполагаю, что (a) FollowerID равно int, (b) @storeId и @senderID ar параметрам хранимой процедуры.

DECLARE @FirstFollower int
DECLARE @FirstMessage int

--Get the first follower (i.e. smallest FollowerID, hopefully that's what you mean
--otherwise you need an appropriate ORDER BY clause here
SELECT @FirstFollower=TOP(1) FollowerId from StoreFollower 
where StoreId = @storeId

--Store message for first follower and get root message id
INSERT INTO Message (senderId, recipientId)
VALUES(@senderId, @FirstFollower)

SELECT @FirstMessage=SCOPE_IDENTITY()

--store a message per follower except the first. Same conditions apply here
--regarding the order of the followers as in the first SELECT query
INSERT INTO Message(senderId, recipientId, rootMessageId)
SELECT @senderId, FollowerID, @FirstMessage
FROM StoreFollower WHERE
FollowerID <> @FirstFollower

НТН

...