Как я могу выполнить сохраненную инструкцию запроса в таблице на SQL Server

#sql-server

#sql-сервер

Вопрос:

 INSERT @Table
SELECT 'A','DECLARE @C INT = 1 SELECT @C 1'
UNION
SELECT 'B','DECLARE @C INT = 5 SELECT @C 6'

SELECT *
FROM   @Table
  

Комментарии:

1. Можете ли вы объяснить, чего вы пытаетесь достичь?

2. Взгляните на команду Exec или выполнить

3. вы можете использовать execute или sp_executesql learn.microsoft.com/en-us/sql/relational-databases / …

4. неясно, пожалуйста, покажите некоторые данные и желаемый результат

5. Я хочу выполнить оператор запроса, который сохранен в таблице с другими столбцами таблицы.

Ответ №1:

Я думаю, вы хотите выполнить запрос по столбцу B..

 declare @Table as table(a varchar(100),b varchar(500))

INSERT @Table
SELECT 'A','DECLARE @C INT = 1 SELECT @C 1'
UNION
SELECT 'B','DECLARE @C INT = 5 SELECT @C 6'


DECLARE @VAR VARCHAR(500)
SET @VAR=(SELECT B FROM @Table WHERE A='A')

PRINT @VAR
EXEC (@VAR)
  

Комментарии:

1. в моей таблице 66500 строк, и я должен показать все столбцы.

2. @samiramahdavi использует цикл

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

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

Ответ №2:

Итак, вы пытаетесь сохранить запросы в своей таблице, а затем динамически вызывать их на основе некоторых условий. затем вы хотели бы выполнить эти запросы. приведенный ниже код должен работать.

 create table #table (
rowcnt int identity (1,1),
value1 varchar(10), 
query1 varchar(8000))

declare @query varchar(8000);

INSERT @Table
SELECT 'A','DECLARE @C INT = 1 SELECT @C 1'
UNION
SELECT 'B','DECLARE @C INT = 5 SELECT @C 6'

select @query = query1 from #table where id =1

exec (@query)
  

Пожалуйста, обратите внимание, что хранение скриптов в таблицах, а затем их вызов не является хорошей практикой.
Как будто хранимая процедура, которая будет вызывать эти скрипты, когда-либо сталкивалась с какими-либо проблемами, это было бы кошмаром для ее отладки. Также было бы сложно выполнить оптимизацию производительности в DB.

Примечание. если вам потребуется объединить несколько строк для получения полного запроса, используйте приведенный ниже код

 select @query = COALESCE(@query,'')  query1 from #table where id =1
  

Комментарии:

1. Я должен использовать инструкцию while для выполнения всех строк!! эта производительность настолько плоха. У меня есть данные 66000 строк!

2. С While у вас возникнут проблемы с производительностью, и я бы посоветовал избегать этого любой ценой. Циклирование вредно для SQl и может даже привести к взаимоблокировкам в БД. как часто вы планируете это выполнять?

3. дайте нам еще немного информации, чтобы помочь. 1. Как осуществляется доступ к этой таблице (через пакетное задание, событие или любым другим способом) 2. Частота этого цикла while (выполняете ли вы ежедневно, еженедельно или ежечасно) 3. Любые ограничения для него, такие как job, должны завершать его выполнение через 10 минут, 30 минут и так далее 4. Есть ли в вашей базе данных команда DB или у вас есть доступ к плану выполнения.

4. выполнение более 20 минут, и все пользователи могут вызывать этот запрос каждый день