我爲HTTP GET下列自定義的API函數,該許可允許大家:微軟Azure移動服務的Javascript自定義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
如果我在DB上運行它,它會工作。 [我以管理員身份登錄數據庫] 但是自定義API無法執行此SP,即使沒有任何錯誤消息,結果變量也是一個空數組:「[]」。
然後我改變我的SP到
Create PROCEDURE dbo.[spTest]
AS
BEGIN
SELECT BrandName FROM dbo.tblBrands WHERE [_key]=105
END
它直接從表而不是使用表變量選擇,它的工作原理。
由於自定義API連接DB與自己的用戶帳戶,而不是管理員用戶,我猜這個API帳戶沒有足夠的權限來聲明表變量。我也嘗試臨時表,它也不起作用。
任何人都知道授予自定義API用戶權限的解決方案嗎?謝謝
UPDATE:
忘掉DB身邊,就算下面的腳本不工作的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);
}
})
};
聲明一個表變量或臨時表不會引發錯誤,但是對它們[select,insert,update]的任何操作都會得到異常,並且請求返回只是一個空數組[]。在日誌中,只記錄「成功」。請幫助
感謝您的回答,我將AMS用戶添加爲「db_owner」的成員,並且我還將其授予dbo模式。它不起作用。其實沒有任何與權限相關的錯誤信息。我也做了一些其他快速測試,請看看我更新的問題 – Yang 2015-02-10 20:04:28
你是對的,我應該在SP中設置NOCOUNT ON。 我不知道自定義API會捕獲那些done_in_Proc消息以及結果集。謝謝你回答我的問題。 – Yang 2015-02-10 21:45:52
你知道什麼時候自定義API捕獲那些done_in_Proc消息,如何讀取在結果中影響了多少行?謝謝 – Yang 2015-02-10 21:52:44