是否可以在SQL Server中的所有数据库中搜索特定视图?如果是,怎么做?
我试图找到一个具体的观点。我知道它存在于特定的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
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-只是非常高兴的用户:-)