Sql server 声明游标中的CASE语句

Sql server 声明游标中的CASE语句,sql-server,tsql,select,cursor,case,Sql Server,Tsql,Select,Cursor,Case,我想声明一个游标,它根据作为参数传递给存储过程的开关来查看不同的表 也就是说,类似于以下内容: DECLARE curs CURSOR FOR CASE WHEN @sname = 'A_database' THEN select a,b,c from [a].dbo.[mytable]; WHEN @sname = 'B_database' THEN select a,b,c from [b].dbo.[mytable]; END 我知道这

我想声明一个游标,它根据作为参数传递给存储过程的开关来查看不同的表

也就是说,类似于以下内容:

DECLARE curs CURSOR FOR
   CASE
     WHEN @sname = 'A_database'
     THEN select a,b,c from [a].dbo.[mytable];
     WHEN @sname = 'B_database'
     THEN select a,b,c from [b].dbo.[mytable];
   END

我知道这是错误的语法,但我希望您能推断出我的意思,并解释应该如何做这类事情。

您可以使用游标变量,如下所示:

DECLARE @curs CURSOR

IF @sname = 'A_database'
   SET @curs = CURSOR FOR 
                  select a,b,c from [a].dbo.[mytable];
ELSE IF @sname = 'B_database'
   SET @curs = CURSOR FOR
                  select a,b,c from [b].dbo.[mytable];

OPEN @curs

... etc

该过程的其余部分是否需要处理它在其中启动的任何数据库?