T SQL Выбрать таблицы на основе значений из другого Select - PullRequest
1 голос
/ 17 июня 2019

У меня есть следующий выбор, который извлекает все таблицы, начинающиеся с 'ABC _':

SELECT *
FROM information_schema.tables
WHERE table_name  LIKE 'ABC_%'

Все таблицы 'ABC_' содержат поле с именем 'SKU'.

У меня есть еще один SELECT, который получает список SKU:

SELECT SKU from tblProducts

Как мне вернуть список таблиц 'ABC_', которые содержат хотя бы один SKU из tblProducts?

1 Ответ

2 голосов
/ 17 июня 2019

Немного магии динамического SQL - все, что нужно:

Создайте объединение всех запросов с нужными вам таблицами, каждый из внутренних запросов должен иметь where exists, чтобы убедиться, что хотя бы одна строка в них имеет значение sku, которое также находится в таблице tblproduct:

DECLARE @Sql nvarchar(max) = '';

SELECT @Sql = @Sql +N'UNION ALL SELECT '''+ table_name +N''' As TableName FROM '+ QUOTENAME(table_name) +
N' As P WHERE EXISTS (SELECT 1 FROM tblProducts WHERE tblProducts.Sku = P.Sku) '
FROM information_schema.tables
WHERE table_name  LIKE 'ABC_%'

-- Remove the first "UNION ALL"
SELECT @Sql = STUFF(@Sql, 1, 10, '')

-- When dealing with Dynamic SQL, Print is your best friend
PRINT @Sql

-- Unremark once you check the printed SQL is what you wanted
--EXEC(@SQL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...