T-SQL游标,变量在循环内不可见

T-SQL游标,变量在循环内不可见,sql,sql-server-2008,Sql,Sql Server 2008,我不确定这里出了什么问题,请帮忙 我试图在结果集上循环,并使用集合中的id来执行另一个select查询 DECLARE @MyCursor CURSOR; DECLARE @ID int; DECLARE @Name varchar(200) BEGIN SET @MyCursor = CURSOR FOR SELECT ID, Name FROM UserGroups OPEN @MyCursor FETCH @MyCursor INTO @ID, @Name; W

我不确定这里出了什么问题,请帮忙

我试图在结果集上循环,并使用集合中的id来执行另一个select查询

DECLARE @MyCursor CURSOR;
DECLARE @ID int;
DECLARE @Name varchar(200)
BEGIN
    SET @MyCursor = CURSOR FOR
    SELECT  ID, Name FROM UserGroups

OPEN @MyCursor 
  FETCH @MyCursor INTO @ID, @Name;

WHILE @@FETCH_STATUS = 0
BEGIN
    SELECT * FROM ErrorToNotify INNER JOIN ErrorMessages ON
    ErrorToNotify.ErrMsgID = ErrorMessages.ID
    INNER JOIN InterfaceErrors ON
    InterfaceErrors.ErrMessageID = ErrorMessages.ID
     WHERE UserGroupID = @ID 
  FETCH NEXT FROM @MyCursor         
END; 

CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END;

在循环之前和循环结束时,使用
将下一步从@MyCursor提取到@ID、@Name

编辑


我的答案解决了语法错误,但正确的方法是不使用游标。检查Rahul的答案。

使用
将下一步从@MyCursor提取到@ID、@Name
循环之前和循环末尾

编辑


我的答案解决了语法错误,但正确的方法是不使用游标。查看Rahul的答案。

这里当然不需要光标,只需要与
用户组进行另一个额外的连接,如下表所示。此外,为什么要在游标中提取
Name
列,因为您没有在任何地方使用它

SELECT * FROM ErrorToNotify 
INNER JOIN ErrorMessages ON ErrorToNotify.ErrMsgID = ErrorMessages.ID
INNER JOIN InterfaceErrors ON InterfaceErrors.ErrMessageID = ErrorMessages.ID
INNER JOIN UserGroups ON ErrorToNotify.UserGroupID  = UserGroups.ID;

当然,这里不需要游标,只需要与
UserGroups
表进行另一个额外的连接,如下所示。此外,为什么要在游标中提取
Name
列,因为您没有在任何地方使用它

SELECT * FROM ErrorToNotify 
INNER JOIN ErrorMessages ON ErrorToNotify.ErrMsgID = ErrorMessages.ID
INNER JOIN InterfaceErrors ON InterfaceErrors.ErrMessageID = ErrorMessages.ID
INNER JOIN UserGroups ON ErrorToNotify.UserGroupID  = UserGroups.ID;

非常感谢你。我会在几分钟内接受你的回答。非常感谢。将在几分钟内接受您的回答。请发布运行查询时收到的错误消息。请发布运行查询时收到的错误消息。是,正确。但我需要在组上循环,因为我对每个组有不同的选择,这只是一个例子。Tnx寻求帮助。是的,正确。但我需要在组上循环,因为我对每个组有不同的选择,这只是一个例子。Tnx寻求帮助。