T-sql,运行名称存储在字符串变量中的函数…使用类似exec的东西…并捕获返回值
以下代码工作正常(Echo是一个用户定义的函数,它接受一个字符串并返回一个字符串): 但问题是,我有一个配置设置,用于在当前数据库中存储函数名。函数必须接受字符串参数并返回字符串参数。所以我不一定要调用dbo.Echo。但我想调用配置的任何东西 所以我想做的是这样的:T-sql,运行名称存储在字符串变量中的函数…使用类似exec的东西…并捕获返回值,sql,function,tsql,dynamic-sql,Sql,Function,Tsql,Dynamic Sql,以下代码工作正常(Echo是一个用户定义的函数,它接受一个字符串并返回一个字符串): 但问题是,我有一个配置设置,用于在当前数据库中存储函数名。函数必须接受字符串参数并返回字符串参数。所以我不一定要调用dbo.Echo。但我想调用配置的任何东西 所以我想做的是这样的: Declare @ttt varchar(max) = '' Declare @sql varchar(Max) Declare @func varchar(Max) Declare @par varchar(max) set @
Declare @ttt varchar(max) = ''
Declare @sql varchar(Max)
Declare @func varchar(Max)
Declare @par varchar(max)
set @func = '[dbo].[Echo]'
set @par = 'sdf'
set @sql = 'set @ttt = ' + @func + '(' + '''' + @par + '''' + ')'
exec (@sql)
print @ttt
但它告诉我scaler@ttt没有声明
所以我试着这样
Declare @ttt varchar(max) = ''
Declare @sql varchar(Max)
Declare @func varchar(Max)
Declare @par varchar(max)
set @func = '[dbo].[Echo]'
set @par = 'sdf'
set @sql = @func + '(' + '''' + @par + '''' + ')'
set @ttt = exec (@sql)
print @ttt
我发现“关键字exec附近的语法不正确”
如何捕获返回值并将其存储在@ttt中
亲爱的StackExchange:您的网站上有一个bug。我不允许对接受的答案发表以下评论
以下是对公认答案的评论:
它可以工作,但我必须将@sql声明为:declare@sql nvarchar(Max)。如果我理解正确,您需要一个输出参数:
在我将sql设置为nvarchar(max)之后,它就可以工作了。我不太明白为什么ttt=ttt输出;在语法上是必需的。。。。所以我不太明白它的目的,但它是必需的,而且是有效的。如果我在这条评论中加了一个,我就不允许发布…@HillOfBeans如果你有at登录代码,例如
@ttt=@ttt output
,它就可以工作。单击注释框右侧的帮助
,查看小减价详细信息。使用@ttt
作为变量(在第一行中声明)和sp_executesql
的参数会带来一些混乱。在@ttt=@ttt output
中,左侧是参数,右侧是接收输出的变量。请看一下位于@HillOfBeans的示例C。这恰好是将参数传递到存储过程中的语法。第二个参数定义了参数的类型。第三个指定值(输入和输出)。我编辑了答案,因为它会让人困惑@ttt=@ttt
Declare @ttt varchar(max) = ''
Declare @sql varchar(Max)
Declare @func varchar(Max)
Declare @par varchar(max)
set @func = '[dbo].[Echo]'
set @par = 'sdf'
set @sql = @func + '(' + '''' + @par + '''' + ')'
set @ttt = exec (@sql)
print @ttt
declare @tttx varchar(max);
set @sql = 'set @ttt = ' + @func + '(' + '''' + @par + '''' + ')'
exec sp_executesql @sql,
N'@ttt varchar(max) output',
@ttt=@tttx output;
print @tttx;