Sql server SQL-从合并查询筛选器获取数据库名称
下午好 我有一个工作查询,在这里我循环遍历我的所有数据库,并向下过滤以检查在哪里使用哪个报表。这是可行的(见下文) 我有一个工作问题:Sql server SQL-从合并查询筛选器获取数据库名称,sql-server,tsql,Sql Server,Tsql,下午好 我有一个工作查询,在这里我循环遍历我的所有数据库,并向下过滤以检查在哪里使用哪个报表。这是可行的(见下文) 我有一个工作问题: 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
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
您的意思是要获取这些报表中使用的源查询所引用的所有数据库?您使用的是
quotename(name)
中的名称。您可能可以将动态查询更改为选择名称、路径……
,以获取所需内容。此外,通过将%
s放置在的两侧,如过滤器,您可以排除该列上的任何索引。如果所有报告都以该文本开头,请删除第一个通配符%
。它应该会加快查询速度。您需要将[name]
用单引号括起来,然后可能会在那里抛出一个作为DatabaseName
别名。但是,是的,就像这样。@EricBrandt,如果他们用引号将[name]括起来,基本上会在查询中使用这些措辞,而不是实际的数据库名称。正确的?select from sys.Database不在执行内容的上下文中。他们正在使用sys.database生成查询。对不起。我当时不太清楚。在动态SQL部分中,它应该是'SELECT'+[name]+''作为DatabaseName,path FROM'
,这样数据库的名称被物化查询视为字符串而不是对象标识符。假设我正确地描绘了输出。今天早上我还没打到1000分,所以请相信我。