【发布时间】:2011-01-31 00:56:10
【问题描述】:
我在 SQL 2005 服务器上有许多数据库。 有一个名为“siteadmin”的主数据库,其中有一个表“PROJECTS”,其中有一个列“DB_NAME”,其中列出了其他数据库的名称。
我需要遍历每个数据库的名称,对每个数据库中存在的名为“BUG”的表执行计数和最大查询。
这是迄今为止我想出的最好的:
USE siteadmin
DECLARE @dbname VARCHAR(50)
DECLARE @iRowCount INT
SET @iRowCount = 0
WHILE @iRowCount < (SELECT COUNT(*) FROM PROJECTS)
BEGIN
SELECT @dbname = DB_NAME FROM PROJECTS WHERE PROJECT_ID = @iRowCount
USE @dbname
select
SQ_SEQ_VALUE,
(select count(BG_BUG_ID) from td.BUG) TotalBUGs,
(select max(BG_BUG_ID) from td.BUG) MaxBUGID
from td.SEQUENCES
WHERE sq_seq_name='BUG'
SET @iRowCount = @iRowCount + 1
CONTINUE
END
'USE @dbname' 语句失败。
每个数据库都有相同的“BUG”表,我需要获取最大的错误 ID 和实际错误的数量。 所以我需要最终得到一个类似的列表:
SQ_SEQ_VALUE, TotalBUGs, MaxBUGID
dbname1 123 150 170
dbname2 165 165 165
dbname3 176 176 176
我觉得我走错了方向。 有人可以帮忙吗?
【问题讨论】:
-
USE需要一个真实的数据库名称。它不能使用变量。不幸的是,这意味着您的代码中有一些动态 SQL。
标签: sql sql-server-2005