Выполнить несколько сценариев .sql, используя c # - PullRequest
0 голосов
/ 12 ноября 2009

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

та 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);
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 12 ноября 2009

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

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

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

0 голосов
/ 13 ноября 2009

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

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

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

0 голосов
/ 12 ноября 2009

Как насчет использования powershell для запуска этого?

$ cmd = get-content "C: \ temp \ CombinedScripts.sql"
foreach ($ svr в get-content "C: \ temp \ ServerList.txt")
{
$ con = "server = $ svr; база данных = master; Integrated Security = sspi"
$ da = новый объект System.Data.SqlClient.SqlDataAdapter ($ cmd, $ con)
$ dt = новый объект System.Data.DataTable
$ da.fill ($ dt) | из-нуль
$ SVR
$ dt | Формат стола
}

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