在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
或者它必须是静态的吗?
答案 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数据库)。