从T-SQL存储过程返回布尔值

时间:2010-10-06 03:43:48

标签: sql-server tsql asp-classic

从T-SQL存储过程中返回布尔值(true / false)的最有效方法是什么?我想让它做一个查询并返回它是否成功。我正在通过ASP打电话。

让我对我正在做的事情稍微具体一点。

如果表中存在记录(表示文档已经保留且无法签出),我想在前端通知用户。我将通过在T-SQL中检查存在...然后以某种方式将其推回到经典ASP(返回值,参数,记录集字段)来确定。

这会使任何答案更合理吗?

3 个答案:

答案 0 :(得分:1)

返回bit:“一个可以取值为1,0或NULL的整数数据类型。”

答案 1 :(得分:1)

不是个好主意。

如果出现错误,将返回值,输出参数或记录集未定义或未设置或部分。例如,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 Server没有......?”......

答案 2 :(得分:1)

我在ASP中有这个函数,假设SP将最后一个参数作为整数输出值。

返回和整数更好,因为你可以返回几个状态,而不仅仅是真/假。

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