從T-SQL存儲過程返回布爾值(真/假)的最有效方法是什麼?我希望它做一個查詢並返回它是否成功。我通過ASP調用。從T-SQL存儲過程返回布爾值
讓我對自己在做什麼更具體一點。
如果一個表中存在一條記錄(表示一個文檔已經被保留並且不能被檢出),我想通知前端的用戶。我將通過在T-SQL中檢查Exists ...來確定,然後以某種方式將它推回到Classic ASP(返回值,參數,記錄集字段)。
這是否使任何答案更合理?
從T-SQL存儲過程返回布爾值(真/假)的最有效方法是什麼?我希望它做一個查詢並返回它是否成功。我通過ASP調用。從T-SQL存儲過程返回布爾值
讓我對自己在做什麼更具體一點。
如果一個表中存在一條記錄(表示一個文檔已經被保留並且不能被檢出),我想通知前端的用戶。我將通過在T-SQL中檢查Exists ...來確定,然後以某種方式將它推回到Classic ASP(返回值,參數,記錄集字段)。
這是否使任何答案更合理?
我在ASP中有這個功能,假設SP將最後一個參數作爲整數輸出值。
返回和整數更好,因爲你可以返回幾個狀態,而不僅僅是true/false。
Function RunSPReturnInteger(strSP , params())
On Error resume next
''// Create the ADO objects
Dim cmd
Set cmd = server.createobject("ADODB.Command")
''// Init the ADO objects & the stored proc parameters
cmd.ActiveConnection = GetConnectionString()
cmd.CommandText = strSP
cmd.CommandType = adCmdStoredProc
''// propietary function that put the params in the cmd
collectParams cmd, params
''// Assume the last parameter is outgoing
cmd.Parameters.Append cmd.CreateParameter("@retval", adInteger, adParamOutput, 4)
''// Execute without a resulting recordset and pull out the "return value" parameter
cmd.Execute , , adExecuteNoRecords
If err.number > 0 then
BuildErrorMessage()
exit function
end if
RunSPReturnInteger = cmd.Parameters("@retval").Value
''// Disconnect the recordset, and clean up
Set cmd.ActiveConnection = Nothing
Set cmd = Nothing
Exit Function
End Function
返回一個bit:「一個可以取值爲1,0或NULL的整型數據類型」。
你讀過[爲什麼Oracle沒有BIT/BOOLEAN數據類型](http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6263249199595) ? – 2010-10-06 03:59:43
@OMG:好悲傷,這是8年的討論。最後,我認爲我同意Jeremy的觀點:「如果我試圖存儲的價值真的是布爾值,那麼當我瀏覽我的模型時,顯然這就是這個列的意思。」 – 2010-10-06 04:05:32
@OMG聽起來像Oracle沒有布爾型數據類型,因爲它們非常固執。 – 2010-10-06 06:52:34
不是一個好主意。
如果出現錯誤,則返回值,輸出參數或記錄集將不確定或未設置或不完整。例如,一個CAST錯誤會中止代碼(沒有TRY/CATCH)。
一個更好的方法將依賴於異常處理,像這樣:
BEGIN TRY
...
--assume worked
END TRY
BEGIN CATCH
DECLARE @foo varchar(2000)
SET @foo = ERROR_MESSAGE()
RAISERROR (@foo, 16,1)
END CATCH
不過,我懷疑我可以回答你的問題,後來關於「沒有SQL服務器爲什麼......?」。 ..
我通常會同意,但在T-SQL和經典ASP中捕捉錯誤都是如此痛苦。 – 2010-10-06 12:20:02
@Eduardo Molteni:爲什麼現在在SQL中捕捉錯誤是一個片斷? – gbn 2010-10-06 12:33:47
IMO:太羅嗦,難以調試。但在ASP經典方面的主要問題。 – 2010-10-06 13:18:34
最高效還是最常見? – 2010-10-06 03:46:45
不要使用布爾值來確定查詢是否成功。你怎麼知道這是從SP代碼中得到的?更好的解決方案是檢查錯誤代碼@@ ERROR – RPM1984 2010-10-06 03:57:52
另外,您應該指定在這種情況下定義「成功」的內容。這是否意味着查詢根本沒有錯誤?它影響> 0行?要麼 ...? – Dane 2010-10-06 05:00:30