Несколько операторов в одном SqlCommand - PullRequest
4 голосов
/ 30 июня 2010

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

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

Ответы [ 3 ]

3 голосов
/ 30 июня 2010

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

1 голос
/ 27 апреля 2011

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

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

0 голосов
/ 30 июня 2010

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

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

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