Sql 在数据库中搜索具有值的表
我正在使用SQLServer2008。我的问题是,给定一个表名,是否有可能构造一个查询,返回包含该表的数据库列表,其中的值表示该表不是空的 例如,我有一个名为tbl_Name的表。我有100个数据库,其中90个tbl_名称为空。我可以得到tbl_Name有值的10个数据库的列表吗?快速总结: 从sys.databases中的master DB select开始,获取所有数据库,光标穿过每个数据库。使用EXEC sqlStatement执行命令等Sql 在数据库中搜索具有值的表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在使用SQLServer2008。我的问题是,给定一个表名,是否有可能构造一个查询,返回包含该表的数据库列表,其中的值表示该表不是空的 例如,我有一个名为tbl_Name的表。我有100个数据库,其中90个tbl_名称为空。我可以得到tbl_Name有值的10个数据库的列表吗?快速总结: 从sys.databases中的master DB select开始,获取所有数据库,光标穿过每个数据库。使用EXEC sqlStatement执行命令等 既然您在数据库中,每个数据库都有一个名为sys.o
既然您在数据库中,每个数据库都有一个名为sys.objects的表,那么您在上面的段落中的目标就是通过表列表发出类似EXECUSE dbName list的命令,从sys.objects中选择,查找“U”用户表的对象类型。获取名称,将SELECT*FROM构建到您的temp中,在这里,诸如此类,诸如此类,将结果插入您在最开始创建的temp表中。。通过EXEC发出SQL,您可以使用游标和存储过程sp_msforeachdb来执行此操作 顾名思义,sp_msforeachdb是一个为每个数据库运行某些内容的过程。您可以使用此选项列出具有给定表名的所有数据库:
sp_msforeachdb 'SELECT "?" AS db from [?].sys.tables WHERE name = ''tbl_Name'''
将这些记录插入临时表,可以轻松地在游标中进行迭代:
DROP TABLE #db_List
DROP TABLE #Not_Empty
GO
CREATE TABLE #db_List (db VARCHAR(MAX))
CREATE TABLE #Not_Empty (db VARCHAR(MAX))
GO
sp_msforeachdb 'INSERT INTO #db_List SELECT "?" AS db from [?].sys.tables WHERE name = ''tbl_Name'''
GO
SET NOCOUNT ON
DECLARE @Iterator varchar(MAX)
,@strSQL varchar(MAX)
DECLARE xyz CURSOR
FOR
--Select stuff to iterate over
SELECT *
FROM #db_List
OPEN xyz
FETCH NEXT FROM xyz
INTO @Iterator
WHILE @@FETCH_STATUS = 0
BEGIN
--Do stuff
SET @strSQL = 'INSERT INTO #Not_Empty
SELECT '''+@Iterator+'''
WHERE EXISTS (SELECT TOP 1 * FROM '+@Iterator+'..tbl_Name)
'
Exec (@strSQL)
FETCH NEXT FROM xyz
INTO @Iterator
END
CLOSE xyz
DEALLOCATE xyz
GO
SET NOCOUNT OFF