【发布时间】:2010-11-05 23:06:36
【问题描述】:
我有一个在存储过程中创建的动态 SQL 语句。我需要使用游标迭代结果。我很难找出正确的语法。这就是我正在做的事情。
SELECT @SQLStatement = 'SELECT userId FROM users'
DECLARE @UserId
DECLARE users_cursor CURSOR FOR
EXECUTE @SQLStatment --Fails here. Doesn't like this
OPEN users_cursor
FETCH NEXT FROM users_cursor
INTO @UserId
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC asp_DoSomethingStoredProc @UserId
END
CLOSE users_cursor
DEALLOCATE users_cursor
这样做的正确方法是什么?
【问题讨论】:
-
“正确”的方法是不使用动态 sql 或游标。你能举一个你想要完成的真实例子吗?
-
完全正确 - 一个存储过程中的两个 SQL 服务器的大 NO-NO :-)
-
动态 SQL 不一定是邪恶的,特别是如果您使用 sp_executesql 而不是 EXEC。游标,虽然是被诅咒的。
-
例如,如果将目标数据库名称参数化,是否有替代动态 SQL 的方法?例如。 Procs 与生产环境和测试环境数据库对话。
标签: tsql stored-procedures dynamic-sql database-cursor