Создать скрипт для таблицы, используя 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
,