Создайте динамический запрос SQL, чтобы вывести список всех пользователей из всех баз данных. - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу создать динамический запрос, чтобы вывести список всех уникальных пользователей в одну таблицу, из которой мне нужно только имя пользователя, из всех разных баз данных, имеющих одинаковую схему базы данных.Поскольку имена таблиц различаются в разных средах, я хотел бы иметь что-то динамическое, чтобы оно могло выполняться в разных средах.Основной запрос выглядит следующим образом:

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;

Так что я хотел быкак создать, это вещь ниже.

ВЫБЕРИТЕ ИМЯ ПОЛЬЗОВАТЕЛЯ ИЗ [ДАННЫЕ]. [ДБО]. [ИСПОЛЬЗУЕТСЯ]

РЕЗУЛЬТАТЫ

ПОЛЬЗОВАТЕЛЬ1

ПОЛЬЗОВАТЕЛЬ2

USER3

ВЫБЕРИТЕ ИМЯ ПОЛЬЗОВАТЕЛЯ ИЗ [ДРУГОЙ]. [DBO]. [USERTABLE]

РЕЗУЛЬТАТЫ

USER3

USER4

USER6

ВЫБЕРИТЕ ИМЯ ПОЛЬЗОВАТЕЛЯ ИЗ [НОВЫЙ]. [DBO]. [USERTABLE]

РЕЗУЛЬТАТЫ

USER1

USER6

USER7

ВЫБРАТЬ ИМЯ ПОЛЬЗОВАТЕЛЯ ИЗ [НЕКОТОРЫЕ]. [DBO]. [USERTABLE]

РЕЗУЛЬТАТЫ

USER2

USER5

USER7

Таким образом, в результате запроса должен быть представлен список ниже.

ДАННЫЕ ____ ДРУГИЕ ___ НОВЫЕ _____ НЕКОТОРЫЕ ____

ПОЛЬЗОВАТЕЛЬ1 ___________ ПОЛЬЗОВАТЕЛЬ1 ___________

ПОЛЬЗОВАТЕЛЬ2 ___________________ ПОЛЬЗОВАТЕЛЬ2 ___

ПОЛЬЗОВАТЕЛЬ3 ___ * ПОЛЬЗОВАТЕЛЬ 3 __________________ * * 1066 __________ * 10631069 * ________________ USER7 ___ USER7 ___

Как уже упоминалось, это может быть динамичным, как: 1. Я не знаю, сколько баз данных в среде;2. Это должно быть легко для любого;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...