2016-05-20 4 views
1

У меня есть таблица, в которой хранятся SQL-запросы. Я читаю это и выполняю его, используя EXECUTE sp_executesql. Мне было интересно, если я хочу изменить этот запрос, как я могу это сделать?Как изменить динамический запрос в SQL Server?

Если я должен добавить переменную в конце концов, я могу сделать что-то вроде этого:

DECLARE @sql1 NVARCHAR(MAX), @var NVARCHAR(20) 

SET @sql1 = (SELECT Query FROM Table WHERE ID = 123) 
SET @var = ' AND CONDITION2' 

PRINT @sql1 + @var 

Результат:

UPDATE Table SET VALUE1 WHERE CONDITION1 AND CONDITION2 

Но если я хочу добавить что-то между ними, I» Не знаю, как это сделать.

Запрос:

DECLARE @sql NVARCHAR(MAX) 
SET @sql = (SELECT Query FROM Table WHERE ID = 123) 
PRINT @sql 

Фактический результат:

UPDATE Table SET VALUE1 WHERE CONDITION1 

Ожидаемое:

UPDATE TOP (100) Table SET VALUE1 WHERE CONDITION1 
+0

Без какой-либо фактические данные никто другой знает, как сделать это либо. В основном потому, что мы понятия не имеем, что вы пытаетесь сделать. Вы должны начать с определения таблиц и выборочных данных. Затем включите то, что вы пытаетесь сделать. –

ответ

3

Просто измените исходный запрос для включения местозаполнитель

SET @sql = 'UPDATE {0} Table SET VALUE1 WHERE CONDITION1'; 
SET @top_condition = 'TOP(100)'; 
SET @sql = REPLACE(@sql, 
        '{0}', 
        CONVERT(varchar(max), @top_condition) 
        ); 

Вы также можете удалить верхний вариант, если вы хотите его

SET @top_condition = ''; 
+0

Это именно то, что я хотел. – CSharper

Смежные вопросы