0

ODBCドライバーを使用するSQLのリンクサーバーがあります。見たいテーブルの名前がす​​でにわかっている場合は、次のように取得できます。

select * from GPData..root.TableName

問題は、利用可能なすべてのテーブルを表示する唯一の方法は、Microsoft Accessを開いて、リンクされたテーブルを作成するように動作することです。プロセス中に、選択できるテーブルが一覧表示されます。

SSMSから直接テーブルを一覧表示する方法はありますか?そうでない場合は、プログラムで(できればC#で)それを実行するにはどうすればよいですか?Accessは明らかにそれを行うことができるので、何らかの方法が必要です。

4

1 に答える 1

1

これが私がC#でそれをした方法です。2つのテキストボックスを含むフォームを作成しました。DSNTextBoxはODBCDSNの名前を取り、OutputFileTextは、生成されたSQLファイルを配置するディレクトリを取ります。このディレクトリには、検出された各テーブルのビューを作成するコマンドが含まれています。

SQLファイルを実行した後、自分のデータベースの一部であるかのように、ビューを介してテーブルにアクセスできます。このようにして、テーブルが何と呼ばれるかを事前に知る必要がなく、クエリを作成するときにテーブル名を参照できます。

    OdbcConnection con = new OdbcConnection();
    con.ConnectionString = "DSN=" + DSNTextBox.Text;
    con.Open();

    DataTable schema = con.GetSchema("tables");

    foreach (DataRow r in schema.Rows)
    {
        var name = r["TABLE_NAME"];
        sqlLines.Add("create view " + name + " as select * from " + DSNTextBox.Text + "..root." + name);
        sqlLines.Add("go");
    }
    con.Close();

    if(OutputFileTextBox.Text.Substring(OutputFileTextBox.Text.Length - 1, 1) != "\\") 
        OutputFileTextBox.Text += "\\";

    File.WriteAllLines(OutputFileTextBox.Text + DSNTextBox.Text + ".sql" , sqlLines.ToArray());
于 2012-04-23T03:09:50.910 に答える