Выполнять разные запросы в каждой строке - PullRequest
0 голосов
/ 05 июня 2018

У меня есть две таблицы, tbl1 и tbl2.tbl2 - это место, где я храню свои данные, а tbl1 - это место, где у меня хранятся разные запросы для выполнения в каждой строке.

Пример: строка Row1 может иметь запрос, извлекающий максимальные значения из tbl2.Row2 в tbl1 может потребоваться запрос, извлекающий значения NOT NULL из tbl2 и т. Д. ...

Я использую соединения для запуска запросов и извлечения данных из tbl1 и tbl2

Как я могу перебрать каждую строку в tbl1, чтобы каждый запрос выполнялся один за другим и где-то сохранялись результаты?

Я думал об использовании WHILE LOOP, но мои знания SQL, если не так, продвинулись, и я сталкиваюсь с препятствиями с этим подходом.Может ли кто-нибудь, пожалуйста, вести меня?

1 Ответ

0 голосов
/ 05 июня 2018

То есть вы храните эти запросы в виде текста?Если вам нужно, чтобы запросы были такими гибкими, вам придется выполнять их с использованием динамического SQL внутри курсора.

DECLARE @sql VARCHAR(MAX);

DECLARE curs CURSOR FOR 
SELECT Sql 
FROM dbo.Tbl1;

OPEN curs;
FETCH NEXT FROM curs INTO @sql;  

WHILE @@FETCH_STATUS = 0  
BEGIN  
    -- Assuming tbl1 contains expressions evaluating to a scalar value like 'MAX(Col1)'
    EXEC('INSERT INTO dbo.Results SELECT ' + @sql + ' FROM dbo.Tbl2');
    FETCH NEXT FROM curs INTO @sql;  --without this, your cursor will stuck
END;

CLOSE curs;  
DEALLOCATE curs; 

Конечно, существуют недостатки в безопасности и производительности при использовании динамического SQL.Я предполагаю, что эти запросы изменяются приложением или чем-то еще.Если они не будут меняться так часто, вам следует рассмотреть возможность создания пользовательских функций / хранимых процедур, а не сохранять их в таблице.

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