![]() |
|
Модераторы: gambit |
![]()
|
|
| HellMasterHaiL |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 9.8.2006 Где: Россия, МО, г. Юб илейный Репутация: нет Всего: 1 |
Добрго времени суток!
вот меня интересует такой вот вопрос: как выполниьт SQL скрипт на БД MS SQL 2000 программно? естественно скрипт содержит и гошки и деклары, и процедуры, и транзакци и дропы... в общем все что угодно! так вот надо выполнять их из программы, не используя командной строки (это мы все умеем) может кто пробовал на SQL DMO реализовать? |
|||
|
||||
| LuMee |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 30.3.2007 Репутация: нет Всего: 1 |
А что сложного? Вот, например:
|
|||
|
||||
| HellMasterHaiL |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 9.8.2006 Где: Россия, МО, г. Юб илейный Репутация: нет Всего: 1 |
с гошками все понятно, и делается проще (просто удаляются все гошки из скрипта и выполняется одной командой)
но по мимо гошек встречается еще типа:
вот тут сыпется не только на GO))) |
|||
|
||||
| LuMee |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 30.3.2007 Репутация: нет Всего: 1 |
GO удалять просто так нельзя, именно с его помощью скрипт "нарезается" на части, каждая из которых может быть самостоятельно. Без него будут ошибки, например в таком скрипте:
После удаления GO и попытке выполнить все оптом будет кричать, что CREATE PROCEDURE должен быть первым. Если же скрипт нужно побить на части, могущие содержать GO, то в качестве разделителя можно использовать что-то еще. Я в свое время вставлял специальный комментарий, выглядело вот так:
Далее оставалось только разбить скрипт, используя в качестве разделителя строку "\r\n--Split\r\n". "Лишние" GO из скрипта придется выбрать руками. |
||||
|
|||||
| HellMasterHaiL |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 9.8.2006 Где: Россия, МО, г. Юб илейный Репутация: нет Всего: 1 |
а если скрипт написан ручками, полупьяным кодером, в 4м часу ночи гденить в огороде возле дачи? и он туда гошек не напихал...
хотелось бы скрипт выполнить целиком, без его нарезки на гошки) |
|||
|
||||
| LuMee |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 30.3.2007 Репутация: нет Всего: 1 |
Ну, если этот полупьяный кодер в своем скрипте пытается несколько ХП или вью подряд создать и при этом отчаянно презирает GO, то такой скрипт ничто не спасет. Единственный выход - оперативно кодера похмелить и под угрозой применения ректотермального криптоанализатора вынудить привести скрипт в порядок.
|
|||
|
||||
| HellMasterHaiL |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 9.8.2006 Где: Россия, МО, г. Юб илейный Репутация: нет Всего: 1 |
и еще одно "если":
допустим в скрипте встречается переменная с именем типа LOGOS, то данный способ разрежит ведь это переменную на LO _ GO _ S, что является ошибкой! ктонибудь знает способ выполнения скрипта одним махом без нарезки? |
|||
|
||||
| LuMee |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 30.3.2007 Репутация: нет Всего: 1 |
GO всегда вставляется с новой строки. Т.е. разбивку надо делать не по GO, а по \r\n\GO. Тогда проблем не будет, если только GO не встречается в коментариях - их нужно будет почистить. Для пущей верности можешь задействовать регулярные выражения ;) Разом выполнить скрипт в общем случае нельзя, ибо SQL Server никакого GO не знает - это примочка Query Analyzer'а. |
|||
|
||||
| HellMasterHaiL |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 181 Регистрация: 9.8.2006 Где: Россия, МО, г. Юб илейный Репутация: нет Всего: 1 |
ну есть же такая консолька osql, которая херачит весь скрипт разом... только к ней обращаться надо по командной строке... не ужто через SQLDMO нельзя как-то до подобного дорыться? ведь делается же бекапы или ресторы БД прямо в приложении... даже процентики показываются))) |
|||
|
||||
| LuMee |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 30.3.2007 Репутация: нет Всего: 1 |
А ты точно знаешь, что она именно этот скрипт разом обрабатывает, а не нарезает на части? И потом, что мешает эту самую утилитку задействовать? Пусть твоя программа ее запускает и подсовывает ей нужный скрыпт. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |