Мой ожидаемый запрос:
with cte as
(
select 'select 1 + 2' tSql
union all
select 'select 1 * 2' tSql
)
select somefunction(tsql) as val
from cte
Результат:
val
3
2
Я пытался сделать это, используя:
- Использовать OPENROWSET:
Я использую OPENROWSET
могу получить динамический строковый результат SQL
SELECT *
FROM OPENROWSET('SQLNCLI','Server=(local);Trusted_Connection=yes;','select 1+2') --result : 3
но я получаю эту ошибку SQL
Сообщение 7314, Уровень 16, Состояние 1, Строка1
Поставщик OLE DB "SQLNCLI" для связанного сервера "(локальный)" не содержит таблицу tSql.Таблица либо не существует, либо текущий пользователь не имеет разрешений для этой таблицы.
with cte as
(
select 'select 1 + 2' tSql
union all
select 'select 1 * 2' tSql
)
select (SELECT * FROM OPENROWSET('SQLNCLI','Server=(local);Trusted_Connection=yes;',tSql)) as val
from cte
Я проверяю, что документ msdn дает проблемную точку:
2.Использование sp_executesql
:
create function F_SqlToNumeric(@sql nvarchar(max))
returns numeric(20,8) as
begin
declare @v numeric(20,8);
select @sql = N'select @v_out = ('+@sql+')';
exec sp_executesql @sql,N'@v_out numeric(20,8) output',@v_out = @v output
return @v
end;
with cte as
(
select 'select 1 + 2' tSql
union all
select 'select 1 * 2' tSql
)
select F_SqlToNumeric(tSql) as val
from cte
Я получаю ошибку:
Ошибка 557, только функции ирасширенные хранимые процедуры могут быть выполнены из функции.