我想验证文本框中给出的数据库和表名,以及服务器上可用的数据库和表名列表。有没有办法让我可以检索可用的数据库和表名列表,这样我就可以将它们与文本框中给出的匹配。
示例 - 在文本框中,我为[anyDatabaseName]。[dbo]。[anyTableName]提供相同格式的可用数据库和表名列表。
我有像[database1]
这样的数据库,并且有[database1Table1]
,[database1Table2]
,[database1Table3]
等表格,等等。同样,[database2]
包含[database2Table1]
,[database2Table2]
,[database2Table3]
等表格,依此类推,我希望将文本框中整体提供的数据库和表名与服务器上可用的列表进行匹配。
但我不想要系统数据库,我也想要数据库的ID,我将收集所有信息,然后在单个表中插入该信息。
答案 0 :(得分:2)
使用SMO。我将使用PowerShell作为我的演示语言,但我在这里所做的事情应该立即转移到C#(或者你正在使用的任何.NET语言)。
import-module sqlps -disablenamechecking;
$srv = new-object microsoft.sqlserver.management.smo.server '.';
foreach ($db in $srv.databases) {
foreach ($tbl in $db.tables) {
$tbl | select parent, name;
}
}
答案 1 :(得分:1)
好的 - 这在很大程度上取决于您使用的数据库。我们假设Database1
和Database2
都是MySQL数据库。
在MySQL中,您可以查询information_schema.tables
以生成该数据库中的表列表。例如,通过PHP程序,您可以触发此查询 -
SELECT '[' + DB_NAME() + '].[' + table_schema + '].[' table_name + ']' table_name from Information_schema.tables
这将生成每个数据库下可用的表列表,如下所示:
[database1].[schema].[table1]
[database1].[schema].[table2]
....
获得此列表后,只需在此列表中搜索您的输入即可。
如果您使用其他数据库(例如Oracle),SELECT
查询将有所不同(您需要查询db_tables
)
答案 2 :(得分:0)
获取MySQL数据库列表的SQL语句是“SHOW DATABASES”。
在PHP中,这将是:
$result = mysqli_query($connection, "SHOW DATABASES");
$db_list = array();
while($db = mysql_fetch_row($db_list)) {
$db_list[] = $db[0];
}
然后,您可以遍历此数据库并检索每个数据库的表。