Как я могу установить курсор на динамически созданный SQL-запрос в хранимой процедуре

#sql #sql-server-2000 #database-cursor

#sql #sql-server-2000 #база данных-курсор

Вопрос:

Я хочу создать динамическую команду, используя переменную @SqlQuery. Я также объявил курсор (пример: @myCursor). Как я могу «УСТАНОВИТЬ @myCursor = CURSOR ДЛЯ @SqlQuery». Синтаксис, который я только что отметил, не работает. Я использую SQL 2000.

Комментарии:

1. В этом так много неправильных вещей…

2. Или вы не могли бы использовать курсор, который является предпочтительным подходом. Курсоры крайне вредны для производительности в SQL Server и никогда не должны быть методом выбора в первую очередь. Что-то вроде 95% всех курсоров (по моему личному опыту) можно заменить кодом на основе набора. Выполнение этого динамически еще хуже, поскольку невозможно полностью протестировать.

Ответ №1:

Ответ №2:

Вы можете сделать это с помощью sp_executesql . Просто не забудьте открыть курсор в динамическом SQL.

 CREATE PROCEDURE OpenCursor (@query nvarchar(max), @cur cursor VARYING OUTPUT)
AS
    DECLARE @sql nvarchar(max)
    SET @sql = N'SET @cur = CURSOR STATIC FOR '   @query   '; OPEN @cur'
    EXEC sp_executesql @sql, N'@cur cursor OUTPUT', @cur OUTPUT
GO

DECLARE @cur cursor
EXEC OpenCursor 'SELECT * FROM sysobjects', @cur OUTPUT
FETCH NEXT FROM @cur