我期望的查询:
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
可以获取动态字符串SQL结果
SELECT *
FROM OPENROWSET('SQLNCLI','Server=(local);Trusted_Connection=yes;','select 1+2') --result : 3
但我收到此SQL错误
7314级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 doc得到的问题点是:
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,只能从函数中执行函数和扩展存储过程。