我正在加载一个特定的问题,即在连接到主数据库时从特定数据库(以及一组数据库)加载表的列表。目前我的查询加载服务器上的所有数据库,然后通过这些数据库循环通过RAISERROR
将信息发送回客户端。当这个循环正在执行时,我需要一个嵌套循环来加载当前数据库的所有表格,以便稍后传输,一旦查询完成,将它作为SELECT
。我遇到的问题是,这将作为C#代码中的单个查询来执行。理想情况下,我想在SQL中加载所有内容并将其返回给客户端进行处理。例如:SQL:连接到另一个表时从指定数据库拉表
WHILE (@dbLoop < @dbCount) BEGIN
-- Do cool things and send details back to client.
SET @dbName = (SELECT _name FROM dbTemp WHERE _id = @dbLoop);
-- USE [@dbName]
-- Get a count of the tables from info schema on the newly specified database.
WHILE (@tableLoop < @tableCount) BEGIN
-- USE [@dbName]
-- Do super cool things and load tables from info schema.
SET @tableLoop += 1;
END
SET @dbLoop += 1;
END
-- Return the list of tables from all databases to the client for use with SQLDataAdapter.
SELECT * FROM tableTemp;
此主题非常简单;我只需要一种方法来访问指定数据库中的表(最好是通过名称),而无需更改对象上的连接,并且不必在我的C#代码中有一个循环来处理对每个数据库上的相同查询C#方面。将所有内容加载到SQL中并将其发送回应用程序会更高效。任何可以提供的帮助都会很棒!
感谢, 杰米
你为什么不写一个存储过程? –
想到了这一点,并被告知我们不使用任何存储过程,除了微软提供的存储过程,因为它们存在安全风险。此外,如果有人也问我为什么不使用游标查询,我们的DBA不允许游标查询,除非可以将其作为迫切需要。 – lxxtacoxxl
@lxxtacoxxl - 实际上它是相反的 - SPs更安全。 – Hogan