Я хочу создать динамический запрос, чтобы вывести список всех уникальных пользователей в одну таблицу, из которой мне нужно только имя пользователя, из всех разных баз данных, имеющих одинаковую схему базы данных.Поскольку имена таблиц различаются в разных средах, я хотел бы иметь что-то динамическое, чтобы оно могло выполняться в разных средах.Основной запрос выглядит следующим образом:
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. Это должно быть легко для любого;