按条件确定光标

时间:2011-09-27 07:48:38

标签: sql-server database-cursor

在SQL Server for CURSOR中我们说:

CREATE PROCEDURE SP_MY_PROC
                (@BANKID VARCHAR(6)='')
-------------------------------
-------------------------------

  DECLARE MY_CURSOR CURSOR FOR
    SELECT .......

现在,我想知道,我们可以根据cerain条件确定select语句吗?

IF BANKID<>''// SELECT * FROM EMPLOYESS WHERE BANKID=@BANKID to be the cursors query
ELSE  // otherwise SELECT * FROM EMPLOYEES  to be the cursors query   

或者它必须是静态的吗?

2 个答案:

答案 0 :(得分:2)

是的,您可以使用Dynamic SQL

执行此操作
IF @BANKID<> ''
    SET @sql = '
       DECLARE MyCursor CURSOR FOR
          SELECT ...'
ELSE
    SET @sql = '
       DECLARE MyCursor CURSOR FOR
          SELECT ...'

EXEC sp_executesql @sql 
OPEN MyCursor

答案 1 :(得分:2)

如果是一个简单的例子,最好将其重新编写为单个查询:

DECLARE MY_CURSOR CURSOR FOR
    SELECT * FROM EMPLOYESS WHERE BANKID=@BANKID or @BANKID=''

当然,我们还没有解决光标是否是解决更大问题的正确解决方案(游标经常被不习惯思考基于集合的解决方案的人滥用,这就是SQL是好的在)。


PS - 避免使用sp_为存储过程添加前缀 - 这些名称是&#34;保留&#34;对于SQL Server,应该避免以防止将来出现不兼容性(并且现在忽略它访问具有此类名称的存储过程也较慢,因为SQL Server在搜索当前数据库之前搜索master数据库)。