В .Net, как выполнить сценарий SQL Server для экземпляра? - PullRequest
2 голосов
/ 14 марта 2012

Я знаю, что есть класс system.data.sqlclient.sqlcommand, который может выполнять пакет одновременно.Поскольку у меня много сценариев SQL Server (в которых есть некоторые ключевые слова GO ), мне нужно найти способ, с помощью которого этот сценарий можно было бы запустить на SQL Server для выполнения.Как это сделать?Спасибо.


Редактировать:

Привет, Энрико, спасибо за предоставленную информацию.Метод executetenonquery вернет тип int [].Как я могу получить весь текстовый результат?Например, у меня есть этот сценарий SQL с именем sql.sql .

PRINT 'blah blah blah';
GO
SELECT @@SERVERNAME AS instance;

Когда я использую sqlcmd для его выполнения, я получаю следующий результат.

C:\TEMP>sqlcmd -S (local)\instance1 -U a -P a -i sql.sql
blah blah blah
instance

-------------------------------------------------------------------
THESIMPSONS\INSTANCE1


(1 rows affected)

C:\TEMP>

Как получить аналогичный результат, используя классы SMO или ADO.NET?Спасибо.

Ответы [ 3 ]

5 голосов
/ 14 марта 2012

Метод ServerConnection.ExecuteNonQuery метода Объекты управления SQL Server (SMO) правильно выполнит сценарии T-SQL, которые содержат несколько пакетов , разделенных ключевое слово GO.

В качестве примечания вы можете даже решить использовать собственный собственный разделитель пакетов , установив свойство ServerConnection.BatchSeparator , которое по умолчанию равно "GO".

Если ваш скрипт возвращает несколько результирующих наборов, которые вы хотите получить обратно в своем приложении, вы можете использовать либо метод ServerConnection.ExecuteReader , либо ServerConnection.ExecuteWithResults . Однако имейте в виду, что эти методы не поддерживают сценарии T-SQL с несколькими пакетами . На данный момент у вас есть несколько вариантов:

  • Разделите скрипт на разделителе "GO" на несколько строк, каждая из которых содержит один пакет , и выполните их одним из методов, упомянутых выше.
  • Вызовите SQLCMD из вашего кода, породив новый процесс и передав сценарий для выполнения в качестве параметра.
1 голос
/ 14 марта 2012

А как насчет SMO, как предлагается в выбранном ответе на этот вопрос: Из .net, как мне отправить много «пакетов» SQL на Sql-Server без большого количества циклов?

0 голосов
/ 14 марта 2012

SqlCommand может выполнять более одного оператора за один раз, если оператор заключен в BEGIN и END, как хранимая процедура.Я сделал это, но я думаю, что разрешены только команды манипулирования данными.

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

...