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)