我在SQL中有一个使用ODBC驱动程序的链接服务器。如果我已经知道我想要的表的名称,我可以像这样检索它:
select * from GPData..root.TableName
问题是我知道查看所有可用表的唯一方法是打开Microsoft Access并表现得像我要创建一个链接表,在此过程中它将列出表供我选择
有没有办法直接从SSMS列出表格?如果没有,我怎样才能在程序上进行编程(最好是在C#中)?必须有一些方法,因为Access显然能够做到这一点。
答案 0 :(得分:1)
以下是我在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());
答案 1 :(得分:-1)
如果从具有链接服务器的SQL Server运行命令,该服务器设置为其他服务器:
SELECT name FROM GPData.database_name.sys.tables;
但是,您更有可能直接从SSMS连接到远程服务器,在这种情况下:
SELECT name FROM database_name.sys.tables;
现在你可能对表名不满意,因为你也应该关注模式。所以:
SELECT qn = QUOTENAME(s.name) + '.' + QUOTENAME(t.name)
FROM GPData.database_name.sys.tables AS t
INNER JOIN GPData.database_name.sys.schemas AS s
ON t.schema_id = s.schema_id
ORDER BY qn;