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

时间:2015-10-06 09:59:58

标签: sql sql-server-2008

我不确定这里有什么问题,请帮忙。

我试图遍历结果集并使用set中的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;

2 个答案:

答案 0 :(得分:3)

在循环之前和循环结束时使用uniform float intensity; // Custom global functions (optional) vec2 sincos(float t) { return vec2(sin(t), cos(t)); } // Pragma directives (optional) #pragma transparent #pragma body // Code snippet _geometry.position.xy = sincos(u_time); _geometry.position.z = intensity;

修改

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

答案 1 :(得分:1)

你当然不需要光标而只需要与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;