Sql server SQL Server脚本循环更新并插入到不同的表(无光标)

Sql server SQL Server脚本循环更新并插入到不同的表(无光标),sql-server,tsql,sql-server-2016,Sql Server,Tsql,Sql Server 2016,我正在编写一个简单的SQL Server脚本,从一个表中获取id,更新源表,并使用游标插入到另一个表中 有没有更好的不用光标的方法 以下是我的光标代码: DECLARE@CourseDelegateId INT; 声明@UserId唯一标识符; 声明的邀请\游标 选择CourseDelegateId,UserGuid 来自[dbo]。[CourseDelegate] 其中StatusTypeId=1,EmailSent=0,[Disabled]=0 按课程订购 打开邀请光标 从Invite_游标

我正在编写一个简单的SQL Server脚本,从一个表中获取id,更新源表,并使用游标插入到另一个表中

有没有更好的不用光标的方法

以下是我的光标代码:

DECLARE@CourseDelegateId INT;
声明@UserId唯一标识符;
声明的邀请\游标
选择CourseDelegateId,UserGuid
来自[dbo]。[CourseDelegate]
其中StatusTypeId=1,EmailSent=0,[Disabled]=0
按课程订购
打开邀请光标
从Invite_游标获取下一个到@CourseDelegateId、@UserId
而@@FETCH\u STATUS=0
开始
开始交易
更新[dbo].[CourseDelegate]
设置EmailSent=1,NotificationTypeId=1,Modified=GETUTCDATE()
其中CourseDelegateId=@CourseDelegateId;
插入[dbo]。[TrainingNotification]
([CourseDelegateId]
,[UserId]
,[NotificationTypeId]
,[CreatedBy]
,[已创建]
,[经修改]
,[修改]
,[禁用])
价值观(
@开斋节,
@用户ID,
1.
原始登录名(),
GETUTCDATE(),
原始登录名(),
GETUTCDATE(),
0)
犯罪
从Invite_游标获取下一个到@CourseDelegateId、@UserId
终止
关闭鼠标
取消分配邀请\u游标

看起来像是一个临时表,
插入…从中选择将更容易:

选择CourseDelegateId,
用户GUID
邀请
来自[dbo]。[CourseDelegate]
其中StatusTypeId=1
和EmailSent=0
和[禁用]=0
按课程顺序排列;
插入[dbo].[TrainingNotification]([CourseDelegateId],
[UserId],
[通知类型ID],
[CreatedBy],
[已创建],
[经修改],
[修改],
[禁用])
选择CourseDelegateId,
UserGuid,
1.
原始登录名(),
GETUTCDATE(),
原始登录名(),
GETUTCDATE(),
0
来自#邀请我;
更新光盘
设置EmailSent=1,
NotificationTypeId=1,
Modified=GETUTCDATE()
从[dbo].[CourseDelegate]光盘
加入#在CD上邀请I.CourseDelegateId=I.CourseDelegateId;