Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прекращение вывполнения sql-скрипта, при определенных условиях 
V
    Опции темы
chip_and_dayl
Дата 14.6.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



Буду краток.

Есть sql-скрипт
Код

if 3=3
-- то нужно прекратить 
-- пакет 0: делаем что-то
GO

-- пакет 1: делаем что-то: вставляем, обновлемя создаем
GO

-- пакет 2: делаем что-то: вставляем, обновлемя создаем
GO

-- пакет 3: делаем что-то: вставляем, обновлемя создаем
GO
.
.
.
-- и т.д.


Как сделать, чтобы при выполнение условия if 3=3 прекращалось выполнения скрипта (чтобы пакет1, 2, 3 - не выполнялись). Я сначала делал используя return, но как оказалось он распространяется на пакет, то беж после GO запросы выполняются (в данном случае пакет 0 не выполнится, остальные выполнятся).

Это сообщение отредактировал(а) chip_and_dayl - 14.6.2010, 15:26


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
chip_and_dayl
Дата 14.6.2010, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



Никак!?! :(


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
sCreator
Дата 14.6.2010, 19:59 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.8.2009
Где: Московская област ь

Репутация: 1
Всего: 5



Использовать BEGIN и END
Код

IF 3 <> 3
BEGIN
    -- пакет 0: делаем что-то
    -- пакет 1: делаем что-то: вставляем, обновлемя создаем
 ...
END
-- ELSE

IF...ELSE (Transact-SQL) MSDN

Добавлено через 13 минут и 6 секунд
кстати Про GO

Инструкции GO по сути разбивают SQL на независимые пакеты, которые даже отправляются на выполнение отдельно
PM   Вверх
chip_and_dayl
Дата 14.6.2010, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



sCreator
Я здесь много Go поставил не спростаsmile Когда создается хранимая процедура или изменяется процедура, а также кажись вьюшка, то она должна быть выполнена отдельным пакетом. В этом случае нужно обязательно ставить Go, и ИФ уже не поможет, или поможет но тогда мне во всех пакетах нужно делать проверку и выходить, а пакетов может быть много, поэтому хотелось что-то такое, чтобы сразу СКЛ-серверу перехотелось выполнять скл-скриптsmile

Добавлено через 2 минуты и 3 секунды
Цитата(sCreator @  14.6.2010,  19:59 Найти цитируемый пост)

IF 3 <> 3
BEGIN   
 -- пакет 0: создаем хранимую процедуру   
GO
-- пакет 1: создаем вьюшку.
GO
END
-- ELSE

Так уже не катит



--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
Akina
Дата 14.6.2010, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Каждый пакет придётся, вероятно, обернуть в свой IF, и использовать локальную пользовательскую переменную в качестве флага выполнения этого IF.

chip_and_dayl, но вообще ты "хочешь странного". Получается так, что ты используешь создание и изменение объектов БД, и при твоём подходе по завершении скрипта ты будешь иметь неопределённое состояние БД... я как-то себе даже представить не могу, ради чего можно на такое пойти.
К тому же ты явно хочешь этот скрипт передать на сервер какой-то клиентской частью (патчер?) - почему бы ему не поручить разруливать эти вопросы?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
chip_and_dayl
Дата 14.6.2010, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



Цитата(Akina @  14.6.2010,  21:55 Найти цитируемый пост)
Получается так, что ты используешь создание и изменение объектов БД, и при твоём подходе по завершении скрипта ты будешь иметь неопределённое состояние БД... я как-то себе даже представить не могу, ради чего можно на такое пойти.

Вообще все просто. По моей идее, в начале скрипта идет проверка версии базы, если версия базы не равняется той что прописана в скрипте, то скрипт завершается тем, что дальше этой проверки он не выполняется. ТО беж такой ситуации, что один пакет выполняется, второй нет и т.д. я создавать не собиралсяsmile


Цитата(Akina @  14.6.2010,  21:55 Найти цитируемый пост)
К тому же ты явно хочешь этот скрипт передать на сервер какой-то клиентской частью (патчер?) - почему бы ему не поручить разруливать эти вопросы?

К сожалению, на данный момент программа для обновления базы пишется, а до того пока она пишется, скрипты вручную запускают люди. Чтобы избежать разных ситуаций, когда ставят/запускают скрипт не в той последовательности, было решено сделать такую проверку.

Как вижу, варианта два или

Цитата(Akina @  14.6.2010,  21:55 Найти цитируемый пост)
Каждый пакет придётся, вероятно, обернуть в свой IF

или
убрать проверку. Так как первый вариант усложнит жизнь программистам, и так как уже не сегодня так завтра будет программа, то наверно будет проще убрать проверку. Сами пакеты, точнее запросы защищены от повторных запусков, точнее от повторного запуска, результат будет тем же, что и до повторного запуска.



--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
sCreator
Дата 15.6.2010, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 20.8.2009
Где: Московская област ь

Репутация: 1
Всего: 5



Цитата(chip_and_dayl @  14.6.2010,  22:06 Найти цитируемый пост)
Я здесь много Go поставил не спроста


Об этом не подумал.

Вот варианты ( кажется работают )
Код

IF 3 = 3
    SET PARSEONLY ON

GO

-- пакет 0: делаем что-то
GO
-- пакет 1: делаем что-то: вставляем, обновлемя создаем
GO
-- пакет 2: делаем что-то: вставляем, обновлемя создаем
GO
-- пакет 3: делаем что-то: вставляем, обновлемя создаем
GO
.
GO

SET PARSEONLY OFF


или

Код

IF 3 = 3
    SET NOEXEC ON

GO

-- пакет 0: делаем что-то
GO
-- пакет 1: делаем что-то: вставляем, обновлемя создаем
GO
-- пакет 2: делаем что-то: вставляем, обновлемя создаем
GO
-- пакет 3: делаем что-то: вставляем, обновлемя создаем
GO
.
GO

SET NOEXEC OFF

PM   Вверх
chip_and_dayl
Дата 15.6.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 603
Регистрация: 22.4.2007
Где: Украина, Киев

Репутация: 2
Всего: 9



sCreator
Большое спасибо. Помог :)

Добавлено @ 13:37
Как оказалось все элементарно и гениально:)

Это сообщение отредактировал(а) chip_and_dayl - 15.6.2010, 13:37


--------------------
Фсё будет хорошо!!!
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.