Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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 Server中的所有数据库中搜索特定视图?如果是,怎么做?_Sql_Sql Server_Views_Information Schema - Fatal编程技术网

是否可以在SQL Server中的所有数据库中搜索特定视图?如果是,怎么做?

是否可以在SQL Server中的所有数据库中搜索特定视图?如果是,怎么做?,sql,sql-server,views,information-schema,Sql,Sql Server,Views,Information Schema,我试图找到一个具体的观点。我知道它存在于特定的SQL Server上,但不知道在哪个数据库下。如果我使用信息模式,它将只在当前数据库中搜索 SELECT * FROM INFORMATION_SCHEMA.Views v WHERE v.Table_Name LIKE '%vwViewName%' 是否可以在SQL Server实例中搜索所有数据库以查找特定视图?如果是,那么如何检查?您可以使用sp\msforeachdb检查所有数据库的sys.views: DECLARE @vi

我试图找到一个具体的观点。我知道它存在于特定的SQL Server上,但不知道在哪个数据库下。如果我使用信息模式,它将只在当前数据库中搜索

SELECT * 
FROM INFORMATION_SCHEMA.Views v 
WHERE v.Table_Name LIKE '%vwViewName%'

是否可以在SQL Server实例中搜索所有数据库以查找特定视图?如果是,那么如何检查?

您可以使用
sp\msforeachdb
检查所有数据库的
sys.views

    DECLARE @views TABLE (ViewName NVARCHAR(4000))
    DECLARE @ViewName NVARCHAR(4000) = 'ViewName'
    DECLARE @query NVARCHAR(4000) = 'SELECT ''?'' + ''.'' + s.name + ''.'' + v.name from [?].sys.views v inner join sys.schemas s on v.schema_id=s.schema_id WHERE v.name LIKE ''%' + @ViewName + '%'''

    INSERT INTO @views (ViewName)
    EXEC sp_msforeachdb @query

    SELECT  * 
    FROM    @views 

您可以使用
sp_msforeachdb
跨所有数据库检查
sys.views

    DECLARE @views TABLE (ViewName NVARCHAR(4000))
    DECLARE @ViewName NVARCHAR(4000) = 'ViewName'
    DECLARE @query NVARCHAR(4000) = 'SELECT ''?'' + ''.'' + s.name + ''.'' + v.name from [?].sys.views v inner join sys.schemas s on v.schema_id=s.schema_id WHERE v.name LIKE ''%' + @ViewName + '%'''

    INSERT INTO @views (ViewName)
    EXEC sp_msforeachdb @query

    SELECT  * 
    FROM    @views 

您可以构建一个列表来搜索每个数据库中的视图,如下所示

SELECT 'select * from ' + name + '.INFORMATION_SCHEMA.Views v where  v.Table_Name like ''%vwViewName%''' 
FROM   master.dbo.sysdatabases
select table_catalog + '.' + table_schema + '.' + table_name  from test.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'
union all   
select table_catalog + '.' + table_schema + '.' + table_name  from prod.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   
例如,这将返回如下结果

select * from master.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%' 
select * from tempdb.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%' 
select * from model.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'  
select * from msdb.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   
select * from Test.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   
select * from Prod.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   
select * from sysdb.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'  
然后可以运行这些查询中的每一个

当然,您可以过滤掉tempdb和其他数据库。
另外,如果您只想运行一个查询,那么可以像这样使用union

SELECT 'select * from ' + name + '.INFORMATION_SCHEMA.Views v where  v.Table_Name like ''%vwViewName%''' 
FROM   master.dbo.sysdatabases
select table_catalog + '.' + table_schema + '.' + table_name  from test.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'
union all   
select table_catalog + '.' + table_schema + '.' + table_name  from prod.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   

现在,您只需运行一个查询,仍然可以获得找到视图的所有数据库,结果的格式为
DBName.dbo.ViewName

您可以构建一个列表,在每个数据库中搜索视图,如下所示

SELECT 'select * from ' + name + '.INFORMATION_SCHEMA.Views v where  v.Table_Name like ''%vwViewName%''' 
FROM   master.dbo.sysdatabases
select table_catalog + '.' + table_schema + '.' + table_name  from test.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'
union all   
select table_catalog + '.' + table_schema + '.' + table_name  from prod.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   
例如,这将返回如下结果

select * from master.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%' 
select * from tempdb.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%' 
select * from model.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'  
select * from msdb.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   
select * from Test.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   
select * from Prod.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   
select * from sysdb.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'  
然后可以运行这些查询中的每一个

当然,您可以过滤掉tempdb和其他数据库。
另外,如果您只想运行一个查询,那么可以像这样使用union

SELECT 'select * from ' + name + '.INFORMATION_SCHEMA.Views v where  v.Table_Name like ''%vwViewName%''' 
FROM   master.dbo.sysdatabases
select table_catalog + '.' + table_schema + '.' + table_name  from test.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'
union all   
select table_catalog + '.' + table_schema + '.' + table_name  from prod.INFORMATION_SCHEMA.Views v where  v.Table_Name like '%vwViewName%'   

现在,您只需运行一个查询,仍然可以获取找到视图的所有数据库,如果需要查找数据库对象(例如表、列、触发器),结果将采用
DBName.dbo.ViewName

格式按名称-查看名为“红色门”的免费工具,它会在整个数据库中搜索任何类型的字符串


对于任何DBA或数据库开发人员来说,它都是一个非常好的必备工具-我是否已经提到过,如果您需要查找数据库对象(例如表、列、触发器),它绝对是免费的按名称-查看名为“红色门”的免费工具,它会在整个数据库中搜索任何类型的字符串


对于任何DBA或数据库开发人员来说,它都是一个非常好的必备工具-我是否已经提到过,它绝对免费用于任何用途???

您可以使用动态sql,您可以在每个数据库上运行该查询,您可以使用sql搜索(Redgate提供的免费工具),您可以…您可以使用动态sql,您可以在每个数据库上运行该查询,您可以使用SQL搜索(Redgate提供的免费工具),您可以……请不要使用此未记录、不受支持且有缺陷的系统过程。请不要使用此未记录、不受支持且有缺陷的系统过程。感谢@GuidoG提供的解决方案,但Horia的查询给出了与DBName.dbo.ViewName类似的精确结果。此外,如果viewName存在于多个数据库中,它将返回多个结果。没问题。这就是堆栈溢出的美妙之处,您可以从多个答案中进行选择。我还编辑了只运行一个查询的答案,如果viewName存在于多个数据库中,该查询也将返回多个结果。感谢@GuidoG提供的解决方案,但Horia的查询给出了类似DBName.dbo.viewName的准确结果。此外,如果viewName存在于多个数据库中,它将返回多个结果。没问题。这就是堆栈溢出的美妙之处,您可以从多个答案中进行选择。我还编辑了我对只运行一个查询的答案,如果viewName存在于多个数据库中,该查询也将返回多个结果。Marc,您是否拥有此产品的库存:)@GuidoG:no-只是非常高兴的用户:-)Marc,您是否拥有此产品的库存:)@GuidoG:no-只是非常高兴的用户:-)