Sql server 2008 使用odbc驱动程序从链接服务器检索表列表

Sql server 2008 使用odbc驱动程序从链接服务器检索表列表,sql-server-2008,odbc,linked-server,Sql Server 2008,Odbc,Linked Server,我有一个SQL中的链接服务器,它使用ODBC驱动程序。如果我已经知道要查看的表的名称,我可以这样检索它: select * from GPData..root.TableName 问题是,我知道查看所有可用表的唯一方法是打开Microsoft Access,就像我要创建一个链接表一样,在此过程中,它会列出供我选择的表 有没有办法直接从SSMS中列出表格?如果不是的话,我该如何用编程的方式(最好是用C语言)来做呢?一定有办法,因为Access显然能够做到这一点。以下是我在C#中的做法。我创建了一

我有一个SQL中的链接服务器,它使用ODBC驱动程序。如果我已经知道要查看的表的名称,我可以这样检索它:

select * from GPData..root.TableName
问题是,我知道查看所有可用表的唯一方法是打开Microsoft Access,就像我要创建一个链接表一样,在此过程中,它会列出供我选择的表

有没有办法直接从SSMS中列出表格?如果不是的话,我该如何用编程的方式(最好是用C语言)来做呢?一定有办法,因为Access显然能够做到这一点。

以下是我在C#中的做法。我创建了一个带有两个文本框的表单。DSNTextBox采用ODBC DSN的名称,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());