从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