创建动态SQL查询以列出所有数据库中的所有用户

时间:2018-11-28 10:18:28

标签: sql dynamic

我想创建一个动态查询,以在一个表中列出所有唯一用户,我只需要该用户名,来自所有具有相同数据库架构的不同数据库。 由于表的名称在不同的环境中会有所不同,因此我希望动态一些,以便可以在不同的环境中执行。 基本查询如下:

SELECT USERNAME FROM DATABASE.DBO.USERTABLE WHERE LOGIN = 'Y'

要在3个数据库上执行此查询,它看起来像这样:

SELECT *        
FROM   ( SELECT UT.USERNAME AS 'DB1'
        FROM   DB1.DBO.USERTABLE UT          
        WHERE  UT.LOGIN = 'Y'       
        ) a      
full outer join         
        ( SELECT UT.USERNAME AS 'DB2'      
        FROM   DOSSIER.DBO.USERTABLE UT   
        WHERE  UT.LOGIN = 'Y'    
        ) b ON a.DB1 = b.DB2         
full outer join         
        ( SELECT UT.USERNAME AS 'DB3'      
        FROM   DB3.DBO.USERTABLE UT   
        WHERE  UT.LOGIN = 'Y'    
        ) c ON a.DB1 = c.DB3
ORDER BY A.DB1

是否有一种简单的方法可以为此创建动态查询,并将其应用于多个数据库?

我已经尝试过下面的代码,但是我发现很难使JOIN ON正常工作。

DECLARE @Sql NVARCHAR(MAX) = NULL;

SELECT  @Sql = COALESCE(@Sql + ' AS '+ name + ' FULL OUTER JOIN ON' + CHAR(13) + CHAR(10), '' ) + 'SELECT USERNAME AS ' + name + ' FROM [' + name + '].[DBO].[USERTABLE] AS '+ name
FROM    master.sys.databases
WHERE   NOT [name] IN ( 'master', 'tempdb', 'model', 'msdb')

PRINT @Sql;

所以我想创建的是下面的东西。

选择用户名 来自[DATA]。[DBO]。[USERTABLE]

结果

USER1

USER2

USER3

选择用户名 来自[OTHER]。[DBO]。[USERTABLE]

结果

USER3

USER4

USER6

选择用户名 来自[NEW]。[DBO]。[USERTABLE]

结果

USER1

USER6

USER7

选择用户名 来自[SOME]。[DBO]。[USERTABLE]

结果

USER2

USER5

USER7

因此,查询结果应显示在下面的列表中。

DATA ____ OTHER ___ NEW _____ SOME ____

USER1 ___________ USER1 ___________

USER2 _____________________ USER2 ___

USER3 ___ USER3 ___________________

________ USER4 ___________________

________________________ USER5 ___

________ USER6 ___ USER6 ___________

________________ USER7 ___ USER7 ___

如前所述,它是动态的,例如: 1.我不知道一个环境中有多少个数据库; 2.任何人都必须易于使用;

0 个答案:

没有答案