Как я могу убедиться, что я удаляю курсор, если он уже существует, прежде чем я попытаюсь открыть его снова?
Для таблицы я могу использовать что-то вроде:
if exists (select top 1 from tempdb.sys.tables where name = '##tmpTable')
drop table ##tmpTable;
... then I can recreate my ##tmpTable
Но я не могу понять, как это сделать для курсора, например
-- First clean up if already exists..
..... <----- what goes here???
-- Declare and use a cursor
DECLARE someCursorName CURSOR
FOR
select something from somewhere
FOR READ ONLY
Я делаю это, чтобы убедиться, что мой скрипт очищается перед началом работы
Лучшее, что я могу придумать, это :
begin try DEALLOCATE someCursorName ; end try begin catch end catch
Это хорошая практика?
EDIT: Это скрипт обслуживания. В наших базах данных, созданных по заказу клиентов, может быть много таблиц, и курсор используется для выполнения статистического анализа по всем таблицам - в зависимости от типов таблиц происходят разные вещи. В общем, много динамического sql. Если сценарий не работает, я хотел бы иметь возможность повторить работу, не беспокоясь о ручном вмешательстве. Здесь есть только один уровень охвата.
Как и все вещи, я буду рад заменить курсоры операциями set. Вот что делают циклы курсоров:
Я пытаюсь измерить уровень энергопотребления моего ipod, когда я запускаю свое приложение. Я импортирую данные с устройства в приложение Instruments, и уровень использования энергии отображается в виде гистограммы. Однако в панели подробностей Instruments уровень использования энергии не показывает никаких цифр, которые указывают на уровень энергии, используемой приложением на моем устройстве. Не знаете ли вы, как получить этот уровень энергопотребления? Я выполнил шаги, указанные в документации Instruments, чтобы получить отчет об использовании энергии с устройства iOS; мое устройство iOS - ipod touch 3G, и я использую Xcode 3.0. Спасибо!