T-sql, 运行 名称存储在字符串变量中的函数...使用类似 exec 的函数...并捕获 return 值
T-sql, Running the function whose name is stored in a string variable...with something like exec...and capturing the return value
下面的代码工作正常(Echo 是一个用户定义的函数,它接受一个字符串 returns 一个字符串):
Declare @ttt varchar(max) = ''
set @ttt = dbo.Echo('sdf')
print @ttt
但问题是我有一个配置设置,它在当前数据库中存储一个函数的名称。该函数必须采用字符串参数和 return 字符串参数。所以我不一定要调用dbo.Echo。但是我想调用配置的任何东西。
所以我想做的是这样的:
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
但是它告诉我缩放器@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
我得到'Incorrect syntax near the keyword exec'
如何捕获 return 值并将其存储在 @ttt 中?
尊敬的 StackExchange:您的网站存在错误。我不允许输入以下评论以响应已接受的答案。
以下是对已接受答案的评论:
它有效,但我必须将 @sql 声明为: Declare @sql nvarchar(Max).
如果我没理解错的话,你想要一个输出参数:
declare @tttx varchar(max);
set @sql = 'set @ttt = ' + @func + '(' + '''' + @par + '''' + ')'
exec sp_executesql @sql,
N'@ttt varchar(max) output',
@ttt=@tttx output;
print @tttx;
下面的代码工作正常(Echo 是一个用户定义的函数,它接受一个字符串 returns 一个字符串):
Declare @ttt varchar(max) = ''
set @ttt = dbo.Echo('sdf')
print @ttt
但问题是我有一个配置设置,它在当前数据库中存储一个函数的名称。该函数必须采用字符串参数和 return 字符串参数。所以我不一定要调用dbo.Echo。但是我想调用配置的任何东西。
所以我想做的是这样的:
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
但是它告诉我缩放器@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
我得到'Incorrect syntax near the keyword exec'
如何捕获 return 值并将其存储在 @ttt 中?
尊敬的 StackExchange:您的网站存在错误。我不允许输入以下评论以响应已接受的答案。
以下是对已接受答案的评论: 它有效,但我必须将 @sql 声明为: Declare @sql nvarchar(Max).
如果我没理解错的话,你想要一个输出参数:
declare @tttx varchar(max);
set @sql = 'set @ttt = ' + @func + '(' + '''' + @par + '''' + ')'
exec sp_executesql @sql,
N'@ttt varchar(max) output',
@ttt=@tttx output;
print @tttx;