微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

T-sql,运行其名称存储在字符串变量中的函数……使用类似exec的东西……并捕获返回值

如何解决T-sql,运行其名称存储在字符串变量中的函数……使用类似exec的东西……并捕获返回值

以下代码可以正常工作(Echo是一个用户定义的函数,它接受一个字符串并返回一个字符串):

const Sequelize = require('sequelize')
const dbConfig = require('../config/dbConfig')
const connection = new Sequelize(dbConfig)

const User = require('../models/User')
const Contact = require('../models/Contact')
const UserImage = require('../models/UserImage')
const UserMatch = require('../models/UserMatch')

User.init(connection)
Contact.init(connection)
UserImage.init(connection)
UserMatch.init(connection)

module.exports = connection;

但是问题是我有一个配置设置,该设置将功能名称存储在当前数据库中。该函数必须采用字符串参数并返回字符串参数。因此,我不一定要叫dbo.Echo。但是我想调用已配置的任何内容

所以我想做的是这样的:

Declare @ttt varchar(max) = ''
set @ttt = dbo.Echo('sdf')
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 = 'set @ttt = ' + @func + '(' + '''' + @par + '''' + ')'
exec (@sql)
print @ttt

我收到“关键字exec附近的语法不正确”

如何捕获返回值并将其存储在@ttt中?

尊敬的StackExchange:您的网站上存在错误。对于被接受的答案,我不允许输入以下评论

以下是关于已接受答案的评论: 它可以工作,但是我必须声明@sql为:声明@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;    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。