2009-11-12 2 views
1

я хочу, чтобы запустить скрипт, который вызывает множество * .sql скрипты у меня есть несколько серверов в лотах отключения к югу офиса потребуется контроль ошибок на сценарии, если * .sql врежется также нравится использовать конфигурационный файл, так что я могу изменить для каждого сайтаВыполнение нескольких .SQL сценариев с использованием C#

той Gerard

здесь некоторые исходного код я нашел

using System.Data.SqlClient; 
using System.IO; 
using Microsoft.SqlServer.Management.Common; 
using Microsoft.SqlServer.Management.Smo; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string sqlConnectionString = "Data Source=TECHSUP4\\SQLEXPRESS;Initial Catalog=TESTCU;Integrated Security=True"; 
      FileInfo file = new FileInfo("C:\\Database\\Scripts\\test.sql"); 
      string script = file.OpenText().ReadToEnd(); 
      SqlConnection conn = new SqlConnection(sqlConnectionString); 
      Server server = new Server(new ServerConnection(conn)); 
      server.ConnectionContext.ExecuteNonQuery(script); 
     } 
    } 
} 
+0

Можете ли вы более конкретно вопрос вы спрашиваете? Вы спрашиваете, как выполнять контроль ошибок и использовать файл конфигурации для указания сайтов? – Rich

ответ

0

Как об использовании PowerShell для запуска я в?

$ CMD = Get-Content "C: \ Temp \ CombinedScripts.sql"
Еогеасп ($ SVR в Get-Content "C: \ Temp \ serverlist.txt")
{
$ CON = «server = $ svr; database = master; Integrated Security = sspi»
$ da = new-object System.Data.SqlClient.SqlDataAdapter ($ cmd, $ con)
$ dt = new-object System.Data.DataTable
$ da.fill ($ dt) | out-null
$ svr
$ dt | Формат стол
}

+0

+ для powershell, - для странного скрипта ... он хочет запускать sql-скрипты, но вы заполняете DataTable? Schwa? – Will

0

Если одна из строк в файле Test.sql сталкивается с проблемой, то код Вы разместили сгенерирует исключение и оставить базу данных в неизвестном состоянии.

Я лично проанализировал каждую инструкцию SQL из файла и выполнил бы ее по одной инструкции за раз. Вокруг каждого выполнения я бы обернул обработчик исключений, который регистрирует исключение и строку, вызвавшую его. В зависимости от того, что вы пытаетесь сделать, вы можете продолжить выполнение утверждений или вы можете прекратить выполнение там.

Следует отметить, что это действительно зависит от того, что находится в «test.sql». Если его простые однострочные команды автономны друг от друга, вы должны иметь возможность выполнять их по одному, как я описал. Если строка команд, которые создают переменные, выполняет хранимые процедуры и т. Д., Это может быть неправильный подход. В этом случае вам может понадобиться переместить больше логики в файл .sql, чтобы сделать то, что нужно сделать.

+0

Или он мог бы просто создать транзакцию. – Will

0

Если ваш сервер MS SQL Server 2005 или выше, вы можете использовать утилиту sqlcmd для запуска своих SQL-операторов. Он также может выступать в качестве языка сценариев и запускать набор операторов sql в виде скрипта.

SQLCMD утилита позволяет вводить операторы Transact-SQL, системные процедуры и файлы сценариев в командной строке в редакторе запросов в SQLCMD режиме, в файле сценария Windows, или в операционной системе (Cmd.exe) шаг задания задания агента SQL Server. Эта утилита использует OLE DB для выполнения пакетов Transact-SQL.

остальное здесь: sqlcmd Utility