我有一个使用 ODBC 驱动程序的 SQL 链接服务器。如果我已经知道要查看的表的名称,我可以像这样检索它:
select * from GPData..root.TableName
问题是我知道查看所有可用表的唯一方法是打开 Microsoft Access 并表现得就像我要创建一个链接表一样,在此过程中它会列出表供我选择。
有没有办法可以直接从 SSMS 列出表格?如果没有,我该如何以编程方式进行(最好在 C# 中)?必须有某种方式,因为 Access 显然能够做到这一点。
我有一个使用 ODBC 驱动程序的 SQL 链接服务器。如果我已经知道要查看的表的名称,我可以像这样检索它:
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());