sql-server - SQL - 从合并查询过滤器中获取数据库名称
问题描述
下午好,
我有一个工作查询,我在其中循环遍历所有数据库,并向下过滤以检查哪个报告在哪里使用。这有效(见下文)
我有这个工作查询:
SET NOCOUNT ON;
IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
DROP TABLE #temp
CREATE TABLE #temp
(
ReportPath VARCHAR(500)
)
declare @SQL nvarchar(max)
set @SQL = STUFF((SELECT '
UNION ALL
' + 'SELECT path FROM ' + quotename(name) + '.dbo.ReportConfig where path like ''%/Standard Reports/Booking/Booked Out by Location%'' and Active = 1'
from sys.Databases
WHERE name LIKE 'SFB-%'
FOR XML PATH(''), type).value('.','varchar(max)'),1,15,'')
INSERT #temp
execute(@SQL)
SELECT ReportPath FROM #temp
这给了我以下输出:
所以我知道在我的 90 个数据库中,该报告被使用了 6 次,但我不知道在哪里。
所以我想包括使用此报告的数据库名称。我用谷歌搜索并尝试了很多东西,但我无法让它工作。
有任何想法吗?
解决方案
只需对您已有的东西进行一点小小的调整,您就可以到达那里
SET NOCOUNT ON;
IF OBJECT_ID (N'tempdb.dbo.#temp') IS NOT NULL
DROP TABLE #temp
--Add a column to your temp table
CREATE TABLE #temp
(
DatabaseName varchar(100)
,ReportPath VARCHAR(500)
)
declare @SQL nvarchar(max)
--adjust your dynamic query and add the [name] column as shown below
set @SQL = STUFF((SELECT '
UNION ALL
' + 'SELECT ''' + [name] + ''' as DatabaseName,path FROM ' + quotename(name) + '.dbo.ReportConfig where path like ''%/Standard Reports/Booking/Booked Out by Location%'' and Active = 1'
from sys.Databases
WHERE name LIKE 'SFB-%'
FOR XML PATH(''), type).value('.','varchar(max)'),1,15,'')
INSERT #temp
execute(@SQL)
SELECT DatabaseName, ReportPath FROM #temp