【发布时间】:2015-02-10 17:02:44
【问题描述】:
我有如下自定义的HTTP GET api函数,权限对所有人都允许:
exports.get = function(request, response) {
var mssql = request.service.mssql;
mssql.query('exec dbo.spTest',
{
success: function (result){
request.respond(statusCodes.OK, result);
},
error: function(err) {
console.log("error is: " + err);
}
})
};
这是我的存储过程,很简单的一个:
Create PROCEDURE dbo.[spTest]
AS
BEGIN
DECLARE @tmpTest Table(BrandName VARCHAR(255))
INSERT INTO @tmpTest
SELECT BrandName FROM dbo.tblBrands WHERE [_key]=105
SELECT BrandName FROM @tmpTest
END
如果我在数据库上运行它,它就可以工作。 [我以管理员身份登录数据库] 但是自定义API无法执行这个SP,即使没有任何错误信息,结果变量是一个空数组:“[]”。
然后我把我的SP改成
Create PROCEDURE dbo.[spTest]
AS
BEGIN
SELECT BrandName FROM dbo.tblBrands WHERE [_key]=105
END
它直接从表中选择而不是使用表变量,它可以工作。
因为自定义 API 将 DB 连接到自己的用户帐户,而不是 admin 用户,我猜这个 API 帐户没有足够的权限来声明表变量。我也试过临时表,它也不起作用。
有人知道授予自定义 API 用户权限的解决方案吗?谢谢
更新:
忘记数据库端,即使以下脚本在 API 中也不起作用:
exports.get = function(request, response) {
var mssql = request.service.mssql;
mssql.query('declare @ttt Table(NAME VARCHAR(255)); insert into @ttt values (\'Jack\'); select * from @ttt;',
{
success: function (result){
console.log("success");
request.respond(statusCodes.OK, result);
},
error: function(err) {
console.log("error is: " + err);
}
})
};
声明一个表变量或临时表不会引发错误,但是对它们的任何操作[选择、插入、更新]都会得到异常并且请求返回只是一个空数组[]。在日志中,只记录了“成功”。请帮忙
【问题讨论】: