Экранирование строки при работе с sp_executesql

Рейтинг: 0Ответов: 1Опубликовано: 29.03.2023

Всем добрый день. Сломал голову с экранированием строки. СУБД MSSQL. В хранимой процедуре использую конструкцию

 exec sp_executesql 'select *
 into Extdb.tmp.bulgurov_february2018_potok_status_2
 from openquery([HANA],''Select * from'+ @SYSTEM+'.february2018_status_2'')';

но получаю стандартную ошибку 'Msg 102, Level 15, State 1, Line 73 Incorrect syntax near '+'. '

При этом засунув этот же кусок в SELECT получаю вполне валидную строку запроса Запрос:

 declare  @SYSTEM varchar (100)
 set @SYSTEM = ' t2_kbulgurov'
 select 'select *
 into Extdb.tmp.bulgurov_february2018_potok_status_2
 from openquery([HANA],''Select * from '+ @SYSTEM+'.february2018_status_2'')'

Результат:

select *  
into Extdb.tmp.bulgurov_february2018_potok_status_2  
from openquery
     ([HANA],'Select * from  t2_kbulgurov.february2018_status_2')

Заранее всем спасибо!

Ответы

▲ 0Принят

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

Это явно указано в описании процедуры sp_executesql

Так должно работать:

DECLARE  @SYSTEM nvarchar(100);

SET @SYSTEM = 't2_kbulgurov';

DECLARE @SQL nvarchar(max);

SELECT @SQL = N'select *
 into Extdb.tmp.bulgurov_february2018_potok_status_2
 from openquery([HANA],''Select * from ' + @SYSTEM +'.february2018_status_2'')';

exec sp_executesql @SQL;