Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在数据库中搜索具有值的表_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 在数据库中搜索具有值的表

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

我正在使用SQLServer2008。我的问题是,给定一个表名,是否有可能构造一个查询,返回包含该表的数据库列表,其中的值表示该表不是空的

例如,我有一个名为tbl_Name的表。我有100个数据库,其中90个tbl_名称为空。我可以得到tbl_Name有值的10个数据库的列表吗?

快速总结:

从sys.databases中的master DB select开始,获取所有数据库,光标穿过每个数据库。使用EXEC sqlStatement执行命令等


既然您在数据库中,每个数据库都有一个名为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