выполнить скрипт для базы данных sql server - PullRequest
3 голосов
/ 25 января 2012

У меня есть скрипт базы данных в файле .sql для sql server 2008, который я хочу выполнить с моей базой данных.Скорее это ручное упражнение, я бы хотел его автоматизировать.У меня есть 3 варианта, пакетный файл, powershell или c #.То, как я выполню это, будет зависеть от моего следующего вопроса - я хочу выполнить сценарий, но также знать о коде, если сценарий не выполняется по какой-либо причине?Это будет частью общего набора шагов установки, поэтому необходимо остановить установку, если скрипт не выполняется правильно.

Ответы [ 7 ]

1 голос
/ 25 января 2012

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

0 голосов
/ 20 апреля 2012

пакет проще, я думаю (но это предпочтение)

runqlscr.cmd

@echo off
REM :: building your script below, not needed if already created
REM echo Select * from PutTableHere where > %temp%\tmpsql.sql
REM echo "put rest of sql script here one line at a time" >> %temp%\tmpsql.sql
REM echo go >> %temp%\tmpsql.sql
REM echo.
REM echo script written
REM echo.
REM echo ready to execute script
REM :: delete pause if needed
REM pause
REM :: the actual command needed in script
REM sqlcmd -U thedbuser -P thepasswd -d thedbname -o resultsofscript.txt < %temp%\tmpsql.sql 
REM echo All done, displaying results
REM type resultofscript.txt
REM echo.

вы можете пропустить сборку скрипта, если он уже сделан, просто измените%temp% tmpsql.sql в расположение и имя вашего скрипта.

в строке sqlcmd, вам нужно ввести свои собственные значения для "*"

, приведенное выше для тестирования,все, что вам нужно для сценария установки, - это строка sqlcmd.

happy batching

0 голосов
/ 25 февраля 2012

Вы можете попробовать объекты управления SQL Server (SMO - http://msdn.microsoft.com/en-us/library/ms162169.aspx),, это должно работать в вашем сценарии, выполняя сценарий sql во время процесса установки.

В этом кратком коде вы можете увидеть, как подключиться кЭкземпляр SQL-сервера, в данном случае используется Аутентификация Windows, но вы также можете использовать Аутентификацию SQL, указав в своих именах connection.Login и connection.Password. После этого устанавливаются обработчики событий, которые могут запускаться во время ( ServerMessage , InfoMessage ) и после ( StatementExecuted ) выполнения сценария. Использование ServerMessage и InfoMessage в данном случае является избыточным, поскольку ServerMessage также будет отображать информационные сообщения (серьезность ошибки <10 в SQL), но хорошо видеть, как это работает. </p>

В этом примере textBox1.Text содержит скрипт T-SQL, который выполняется с этой строкой: server.ConnectionContext.ExecuteNonQuery (textBox1.Text); оператор Execute окружен попыткой ... catch to ловить любые ошибки во время исполнения.

private void button1_Click(object sender, EventArgs e)
    {
        ServerConnection connection = new ServerConnection("stjepan-lap");
        connection.LoginSecure = true;
        Server server = new Server(connection);
        server.ConnectionContext.InfoMessage += new SqlInfoMessageEventHandler(ConnectionContext_InfoMessage);
        server.ConnectionContext.StatementExecuted += new StatementEventHandler(ConnectionContext_StatementExecuted);
        server.ConnectionContext.ServerMessage += new ServerMessageEventHandler(ConnectionContext_ServerMessage);

        //Executes T-Sql script
        try
        {
            server.ConnectionContext.ExecuteNonQuery(textBox1.Text);
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
            if (ex.InnerException != null)
                Debug.WriteLine(ex.InnerException.Message);
        }

        server.ConnectionContext.Disconnect();
    }

    void ConnectionContext_ServerMessage(object sender, ServerMessageEventArgs e)
    {
        Debug.WriteLine(e.Error);
    }

    void ConnectionContext_StatementExecuted(object sender, StatementEventArgs e)
    {
        Debug.WriteLine(e.SqlStatement);
    }

    void ConnectionContext_InfoMessage(object sender, SqlInfoMessageEventArgs e)
    {
        Debug.WriteLine(e.Message);
    }

Вы должны ссылаться на dll SMO и вставлять соответствующие символы в ваш файл кода

Microsoft.SqlServer.Smo.dll
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll 
....
using System;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
0 голосов
/ 26 января 2012

Ниже приведен процесс автоматизации скрипта через установщик в c #

Код в c #

using (System.Data.SqlClient.SqlConnection con = new SqlConnection("YourConnection string")) {
    con.Open();
    SqlCommand cmd = new SqlCommand();
    string expression = "Parameter value";
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Your Stored Procedure";
    cmd.Parameters.Add("Your Parameter Name", SqlDbType.VarChar).Value = expression;
    cmd.Connection = con;
    using (IDataReader dr = cmd.ExecuteReader()) {
        if (dr.Read()) {
        }
    }
}

В вашем проекте добавьте класс установщика Reference => Класс установщика

You can find below mentioned events for the installer process.
1. Install
2. Commit
3. Rollback
4. UNInstall

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

0 голосов
/ 26 января 2012

Вы смотрели на использование утилиты SQLCMD? http://msdn.microsoft.com/en-us/library/ms162773.aspx

0 голосов
/ 26 января 2012
  • Запуск sqlcmd.exe bootstrapper - труднее обрабатывать ошибки
  • запускать собственным приложением - самый простой способ обработки ошибок и создания предупреждений
0 голосов
/ 25 января 2012

Вы также можете упаковать это в хранимую процедуру и там использовать некоторую обработку ошибок.

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