如何在T-Sql中使用行索引

时间:2012-10-08 13:56:30

标签: sql-server sql-server-2008 sql-server-2008-r2

我有表提醒,消息和用户。我必须实现,每当在Reminder表中创建一行时,Users表中的Administrators将在其Messaging表中获取消息。

我正在sql查询中做所有事情。我已经达到所有管理员用户的插入和选择,我也能够在记录数量上运行一个循环。我想逐个插入循环。

If @flag=1 // flag=1 means reminder is created successfully
BEGIN
 Declare @BackUpMessage as varchar(200)
 Set @BackupMessage = 'Hi Admin,\r\n
 \t A backup has been scheduled by the system. Details are given below: \r\n
    a) Bakcup Type : '+rem_type+' \r\n
    b) Backup Date : '+ Convert(varchar,GETDATE()+@days)+''

 Set @Count = (Select Count(*) From JFPUsers Where RoleId=1 and Active=1) // Total Numbers of Admin
 IF @Count > 0
    Declare @i int =0

    Select Id From JFPUsers Where RoleId=1 and Active=1 // Getting Id of each admin to save
    While @i < @Count
    BEGIN
        Insert Into JFMessaging (MessageBody, SenderId,RecieverId,IsRead,SentOn,IsActive)
        Values(@BackUpMessage, -1, ,0,GETDATE(),1) // I am stucked here 
    END
END

我可以使用C#轻松完成,但我希望在单个连接和单个命中@ backend中完成这些操作。

更新:请参阅图片和摘要

总结:我需要的是每当在提醒中创建记录时。该查询将从JFPUsers选择所有管理员{condition RoleId = 1 is admin}并在JFMessaging中创建那么多行,其中SenderId将是创建提醒的用户或-1(对于系统)而RecieverId将包含带有自定义通知消息的管理员ID 。

enter image description here

1 个答案:

答案 0 :(得分:1)

在Reminder表上创建一个INSERT触发器,为管理员执行INSERT到messages表中。试着摆脱在SQL中使用循环的习惯 - 这通常是不好的做法。

像这样......

insert JFMessaging (ReceiverID, Otherfields)
select UserID, otherfields
from
    inserted
        cross join
    JFPusers
where RoleID = 1