SQLの窓 イラストAC フリー素材

2018年10月19日

PowerShell 内に C# を記述して、SQLServer( SQLExpress ) の SMO を使用してテーブルの CREATE TABLE 文 を取得する

ライブラリを取得する為に、nuget を使用します。

少し参照する dll が多いですが、VisualStudio で実行テストした後 PowerShell に移植しています
$code = @"
using System;
using System.Text;
using System.IO;
using System.Collections.Generic;
using System.Collections.Specialized;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
public class MyClass {

	public static void create_sql() {

		UTF8Encoding UTF8N_Enc = new UTF8Encoding();
		// false は上書き
		StreamWriter WriteFile = new StreamWriter("sqlexpress.sql", false, UTF8N_Enc);

		// サーバー
		Server srv;
		// インスタンス
		srv = new Server();

		// サーバーインスタンスの情報
		srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect;
		srv.ConnectionContext.LoginSecure = false;
		srv.ConnectionContext.Login = "sa";
		srv.ConnectionContext.Password = "";
		// 接続
		srv.ConnectionContext.Connect();

		// バージョンの表示
		Console.WriteLine(srv.Information.Version);

		// 参考
		Scripter scripter = new Scripter(srv);

		Database myDb = srv.Databases["lightbox"];
		foreach (Table myTable in myDb.Tables)
		{

			StringCollection tableScripts = myTable.Script();
			foreach (string script in tableScripts)
			{
			  WriteFile.WriteLine(script);
			}
		}

		WriteFile.Close();
		WriteFile.Dispose();

		srv.ConnectionContext.Disconnect();


	}
}
"@
Add-Type -Path ("C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.ConnectionInfo.dll","C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Smo.dll","C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.Sdk.Sfc.dll","C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SmoExtended.dll","C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SqlEnum.dll")
Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.ConnectionInfo.dll","C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Smo.dll","C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.Management.Sdk.Sfc.dll","C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SmoExtended.dll","C:\user\lightbox\nuget\Microsoft.SqlServer.SqlManagementObjects.140.17283.0\lib\net40\Microsoft.SqlServer.SqlEnum.dll")

[MyClass]::create_sql()




posted by at 2018-10-19 15:54 | PowerShell | このブログの読者になる | 更新情報をチェックする


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX