Один из возможных подходов - генерировать и выполнять динамический оператор для всех возможных SELECT
операторов.
Таблица:
CREATE TABLE #Statements (
[value] int,
[query] nvarchar(max)
)
INSERT INTO #Statements
([value], [query])
VALUES
(25, N'SELECT id, name FROM courses'),
(12, N'SELECT id, name FROM countries')
T-SQL:
DECLARE @stm nvarchar(max) = N''
SELECT @stm = (
SELECT
CONCAT(
[query],
N' WHERE id = ',
[value],
N'; '
)
FROM #Statements
FOR XML PATH('')
)
PRINT @stm
EXEC sp_executesql @stm
Сгенерированные операторы:
SELECT id, name FROM courses WHERE id = 25;
SELECT id, name FROM countries WHERE id = 12;
Если вы хотите извлечь результаты всех ваших операторов в единый набор результатов и если столбцы id
и name
имеют совместимые типы данных, вы можете выполнить следующееоператор (с возможными CONVERT
звонками):
DECLARE @stm nvarchar(max) = N''
SELECT @stm = STUFF(
(
SELECT
CONCAT(
N'UNION ALL ',
[query],
N' WHERE id = ',
[value],
N' '
)
FROM #Statements
FOR XML PATH('')
),
1, 10, N'')
PRINT @stm
EXEC sp_executesql @stm