SMO のダウンロード方法は、C# : VB.net : SQLExpress(SQLServer) : SQL-DMO と同等の SMO によるバックアップ を参照して下さい。 こちらは、同じコードを PowerShell で実行します 参考ページ : Generate Scripts for database objects with SMO for SQL Server ※ 参考ページでは、いろいろなオプションが紹介されています。
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SQLExpress_backup
{
class Program
{
static void Main(string[] args)
{
{
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);
// 参考
// https://www.mssqltips.com/sqlservertip/1833/generate-scripts-for-database-objects-with-smo-for-sql-server/
// 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();
}
}
}
}
結果サンプル ※ sqlexpress.sql に出力された内容です
SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[コード名称マスタ]( [区分] [int] NOT NULL, [コード] [nvarchar](10) COLLATE Japanese_CI_AS NOT NULL, [名称] [nvarchar](50) COLLATE Japanese_CI_AS NULL, [数値1] [int] NULL, [数値2] [int] NULL, [作成日] [datetime] NULL, [更新日] [datetime] NULL ) ON [PRIMARY] SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[社員マスタ]( [社員コード] [nvarchar](4) COLLATE Japanese_CI_AS NOT NULL, [氏名] [nvarchar](50) COLLATE Japanese_CI_AS NULL, [フリガナ] [nvarchar](50) COLLATE Japanese_CI_AS NULL, [所属] [nvarchar](4) COLLATE Japanese_CI_AS NULL, [性別] [int] NULL, [作成日] [datetime] NULL, [更新日] [datetime] NULL, [給与] [int] NULL, [手当] [int] NULL, [管理者] [nvarchar](4) COLLATE Japanese_CI_AS NULL, [生年月日] [datetime] NULL ) ON [PRIMARY] SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[取引データ]( [取引区分] [nvarchar](2) COLLATE Japanese_CI_AS NOT NULL, [伝票番号] [int] NOT NULL, [行] [int] NOT NULL, [取引日付] [datetime] NULL, [取引先コード] [nvarchar](4) COLLATE Japanese_CI_AS NULL, [商品コード] [nvarchar](4) COLLATE Japanese_CI_AS NULL, [数量] [int] NULL, [単価] [int] NULL, [金額] [int] NULL, [更新済] [nvarchar](1) COLLATE Japanese_CI_AS NULL ) ON [PRIMARY] SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[商品マスタ]( [商品コード] [nvarchar](4) COLLATE Japanese_CI_AS NOT NULL, [商品名] [nvarchar](50) COLLATE Japanese_CI_AS NULL, [在庫評価単価] [int] NULL, [販売単価] [int] NULL, [商品分類] [nvarchar](3) COLLATE Japanese_CI_AS NULL, [商品区分] [nvarchar](1) COLLATE Japanese_CI_AS NULL, [作成日] [datetime] NULL, [更新日] [datetime] NULL, [備考] [ntext] COLLATE Japanese_CI_AS NULL, [削除フラグ] [nvarchar](1) COLLATE Japanese_CI_AS NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[得意先マスタ]( [得意先コード] [nvarchar](4) COLLATE Japanese_CI_AS NOT NULL, [得意先名] [nvarchar](50) COLLATE Japanese_CI_AS NULL, [得意先区分] [nvarchar](1) COLLATE Japanese_CI_AS NULL, [担当者] [nvarchar](4) COLLATE Japanese_CI_AS NULL, [郵便番号] [nvarchar](7) COLLATE Japanese_CI_AS NULL, [住所1] [nvarchar](100) COLLATE Japanese_CI_AS NULL, [住所2] [nvarchar](100) COLLATE Japanese_CI_AS NULL, [作成日] [datetime] NULL, [更新日] [datetime] NULL, [締日] [int] NULL, [締日区分] [int] NULL, [支払日] [int] NULL, [備考] [nvarchar](100) COLLATE Japanese_CI_AS NULL ) ON [PRIMARY]
SET ANSI_NULLS (Transact-SQL) SET ANSI_NULLS が ON の場合、WHERE column_name = NULL を使用する SELECT ステートメントを実行すると、column_name に NULL 値が入っていた場合は条件は成り立たず、行が返されません。逆に、SET ANSI_NULLS が OFF の場合は、ISO 標準が適用されません。 WHERE column_name = NULL を使用する SELECT ステートメントでは、column_name に NULL 値を持つ行が返されます。 SET ANSI_NULLS OFF; select * from [社員マスタ] where 手当 = null; この SQL では、手当が NULL の行が戻されます SET QUOTED_IDENTIFIER ON にすると、テーブル名等の識別市子を "(ダブルクォート)で囲む事ができます SET QUOTED_IDENTIFIER OFF; select * from "社員マスタ" この SQL はエラーとなります
|
|
【VS(C#)の最新記事】
- Replit : cs-list
- C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
- C#( Form ) : ウインドウ枠の無い吹き出しの作成
- C# のタプル( Visual Studio 2017 でテスト )
- C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
- C# の文法的文字列処理
- C# : System.Data.Odbc によるデータベースのテーブルからのデータ取得処理( サンプルの SQL は MySQL 用です )
- C# : Excel を データベースとして DataGridView に読み込む
- C# : dynamic 型 による Excel へのアクセス
- C# : フォームを表示せずに、通知領域にアイコンを表示させる常駐プログラム
- Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード
- C# : System.Data.Odbc データ取得(SELECT)処理( MySQL ) : ※ using 無し( Dispose 実行 )
- C# : SQL 文を外部テキストにして、String.Format でデータ部分を置き換えて利用する
- C# コンソールアプリを AN HTTPD で実行
- C# : DataGridView に TKMP.DLL の IMAP(POP3) で受信したメールを非同期に表示する( 添付ファイルも取得 )
- C# : TKMP.DLLを使った、メール送信テンプレート
- C# と VB.net : TKMP.DLL を使って IMAP でメール本文の一覧を取得する( コンソール )
- C# でDataTable と DataSource を使用して、DataGridView にデータを表示するテンプレート( 行をダブルクリックしてダイアログを表示して行データを処理 )
- (C#) / VS2010 または VS2012 : TKMP.DLL(3.1.2 または 3.1.8)を使った、『さくらインターネット』用メール送信テンプレート
- C# でDXライブラリを使って簡単なシューティングをクラス化して標準化 / メインループとプレイヤー (4)






