-3
Microsoft.SqlServer.Management.Smoクラスを使用してテーブルの作成スクリプトを取得しようとしています。 GO文を内部に持つスクリプトを取得したい。しかしSMOはデータベースからすべてのGO文とUSEを省いた。SMOを使用してGOステートメントを使用してテーブルのスクリプトを作成
例: - 管理スタジオから生成されたスクリプトを作成します。
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
私は管理スタジオの正確なコピーをしたい
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]
SMO
使用してスクリプトを作成します。私はfalse
にNoCommandTerminator
を設定することをお勧め同じ
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)
{
}
}
}
両方のステートメントを実行すると、実際に同じステートメントになります。データベースが接続文字列にあり、GOが暗黙的である場合、データベースを指定する必要はありません –
['ScriptBatchTerminator'](https://msdn.microsoft.com/en-us/library/microsoft.sqlserver)。 manage.smo.scriptingoptions.scriptbatchterminator.aspx) –
options.ScriptBatchTerminator = trueを使用します。しかし、依然として同じ結果、GO文は照会されていません。 –