2010-06-30 4 views
4

У меня есть набор сценариев sql, которые я отправляю на SQL-сервер, используя объект SqlCommand в C#. Эти скрипты создают хранимые процедуры, и пока я просто создаю процедуры, все работает finde. Если в моих сценариях содержится обычный блок «if exists ... drop XYZ; create procedure XYZ ...», я получаю сообщение об ошибке, которое должно быть первым утверждением в пакете. Сегмент с запятой или «GO» работают как разделитель.Несколько операторов в одном SqlCommand

Любой намек на то, как выполнить такой скрипт с помощью одного SqlCommand? Я ожидал, что смогу установить свойство «Пакет» или что-то в этом роде, но я ничего не нашел.

ответ

3

Конфликтные операторы должны либо разделяться разделителем партий (по умолчанию GO - что вы говорите, не работает), либо, если возможно, с точки зрения вашей программной логики, выполненной в другом порядке. Однако в большинстве случаев реструктуризация порядка заявлений будет невозможна, так что вам придется прибегать к разделению в разных партиях, поэтому я предлагаю запустить их разными партиями.

+0

Я попробовал это некоторое время назад и по существу разделил строку на слово «GO», затем зациклился и выполнил инструкции – amarsuperstar

+0

Не тот ответ, который я хотел здесь, но, вероятно, правильный. Разделение на «GO» - это решение, которое я буду использовать. – Achim

0

; должен работать нормально, как показано в http://www.java2s.com/Code/CSharp/Database-ADO.net/ExecutemultipleSQLstatementsusingaSqlCommandobject.htm

Но вы можете использовать хранимую процедуру для этой задачи, которая упростит ситуацию.

+0

с 'создать procedure' это не то же самое, как с' SELECT' и другие – Andrey

1

Если вы хотите представить большой sql-скрипт с пакетами в нем, вы должны использовать SMO. Это дает вам гораздо больше контроля над тем, как скрипты выполняют свою работу. И не полагаться на пользовательских сценариев SQL измельчающего логики (мне нужно, чтобы попасть в проблемы с этим?)

http://msdn.microsoft.com/en-us/library/ms212724.aspx

Смежные вопросы