sql >> データベース >  >> RDS >> Sqlserver

Datatable C# に基づいて SQL テーブルを作成する

    これは linqpad でうまくいきました:( "Microsoft.SQLServer.SMO" への nuget 参照を追加した後

    回答からコピーおよび変更: vb.net を使用して CREATE TO としてテーブルをスクリプト

    Tables["[exd].[ABCINDICATORSET]"] にアクセスしようとして問題が発生しました。テーブルとドメインを正しく指定する方法がわかりませんでした。常に null が返されていました。

    // Define your database and table you want to script out
    string dbName = "Ivara77Install";
    
    // set up the SMO server objects - I'm using "integrated security" here for simplicity
    Server srv = new Server();
    srv.ConnectionContext.LoginSecure = true;
    srv.ConnectionContext.ServerInstance = ".";
    
    // get the database in question
    Database db = new Database();
    db = srv.Databases[dbName];
    
    StringBuilder sb = new StringBuilder();
    
    // define the scripting options - what options to include or not
    ScriptingOptions options = new ScriptingOptions();
    options.ClusteredIndexes = true;
    options.Default = true;
    options.DriAll = true;
    options.Indexes = true;
    options.IncludeHeaders = true;
    
    
    
    // script out the table's creation 
    Table tbl = db.Tables.OfType<Table>().Single(t => t.Schema.ToLower() == "exd" && t.Name.ToLower() == "ABCINDICATORSET".ToLower() );
    
    StringCollection coll = tbl.Script(options);
    
    foreach (string str in coll)
    {
        sb.Append(str);
        sb.Append(Environment.NewLine);
    }
    
    // you can get the string that makes up the CREATE script here
    // do with this CREATE script whatever you like!
    string createScript = sb.ToString();
    

    一部の SQL は、Script Table As -> Create To -> New Query Editor Window を実行したときに SQL Server から得られるものよりも少し冗長です

    SQL サーバーが生成するものに近づけるための変更は次のとおりです。

    //options.Indexes = true;
    options.IncludeHeaders = true;
    options.NoCollation = true;
    


    1. トリガーでループ?

    2. メンバ プロシージャの呼び出し NULL SELF 引数 Oracle

    3. MariaDBで重複する行を選択する4つの方法

    4. すべての便利な11gダイナミックパフォーマンスビュー