开发者

How to translate this C#-like code to an SQL Server stored proc

Below is pseudo-code for SQL Server stored procedure I need to write:

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

It gets all Store's follower IDs, creates a record in Message for the first one. Then it creates a Message for each subsequent follower ID, also specifying ID of the first Message record in the batch.

I need to convert this to SQL Server stored procedure, however I never wrote one before so I'm hesitant. Should I use a table variable to hold select result? Should I use arrays? What is the closest match to foreach here? How do I slice off the first element?

I would very much appreciate a sketc开发者_运维知识库h of such proc, just to know what to look further at.


My stab at it in T-SQL. I assume that (a) FollowerID is int, (b) @storeId and @senderID ar parameters of the stored procedure.

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

HTH

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜