Создать скрипт для таблицы, используя GO Statement, используя SMO

Я пытаюсь получить сценарий создания таблицы, используя класс Microsoft.SqlServer.Management.Smo. Я хочу получить сценарий с GO оператором внутри. Но SMO пропустил все операторы GO и USE из базы данных.

Например:-Создать скрипт, сгенерированный из студии управления.

USE [Testing_BlankData_1_Staging]

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE TABLE [dbo].[stgUser](
    [UserName] [nvarchar](100) NOT NULL,
    [FullName] [nvarchar](100) NULL,
    [Title] [nvarchar](100) NULL,
    [Department] [nvarchar](100) NULL,
    [Role] [nvarchar](100) NULL
) ON [PRIMARY]

GO

Создать скрипт с помощью SMO

SET ANSI_NULLS ON

SET QUOTED_IDENTIFIER ON

CREATE TABLE [dbo].[stgUser](
    [UserName] [nvarchar](100) NOT NULL,
    [FullName] [nvarchar](100) NULL,
    [Title] [nvarchar](100) NULL,
    [Department] [nvarchar](100) NULL,
    [Role] [nvarchar](100) NULL
) ON [PRIMARY]

Я хочу точную копию управления студии. Пожалуйста, предложите..

Пожалуйста, найдите код для того же

public void GenerateScript()
{
    string sqlServer = "My SQL Server instance";
    string sqlLogin = "login";
    string sqlPassword = "password"
    string sqlDatabase = "Testing_BlankData_1_Staging";


    Server server = new Server(sqlServer);

    server.ConnectionContext.LoginSecure = true;
    server.ConnectionContext.Login = sqlLogin;
    server.ConnectionContext.Password = sqlPassword;
    server.ConnectionContext.Connect();

    foreach (Table table in server.Databases[sqlDatabase].Tables)
    { 

        StringBuilder sb = new StringBuilder();

        ScriptingOptions options = new ScriptingOptions();
        options.ClusteredIndexes = true;
        options.Default = true;
        options.DriAll = true;
        options.Indexes = true;
        options.IncludeHeaders = true;
        options.AnsiPadding = true;

        StringCollection coll = table.Script(options);

        foreach (string str in coll)
        {
            sb.Append(str);
            sb.Append(Environment.NewLine);
        }

        try

        {
                string path = "Any path " + table.Name + ".sql";
                System.IO.StreamWriter fs = System.IO.File.CreateText(path);
                fs.Write(sb.ToString());
                fs.Close();
        }
        catch (Exception ex)
        {

        }
    }
}

1 ответ

Я бы предложил установку NoCommandTerminator в false,

Свойство ScriptingOptions.NoCommandTerminator

Если True, отдельные операторы Transact-SQL не разграничиваются в сгенерированном скрипте

Если значение равно False (по умолчанию), отдельные операторы Transact-SQL разделяются с помощью ограничителя команды для конкретного подключения.

Также рассмотрите установку ScriptBatchTerminator в true ,

Другие вопросы по тегам