Возврат логического значения из хранимой процедуры T-SQL - PullRequest
4 голосов
/ 06 октября 2010

Какой самый эффективный способ вернуть логическое значение (true / false) из хранимой процедуры T-SQL?Я хочу, чтобы он сделал запрос и возвратил, успешно это или нет.Я звоню через ASP.

Позвольте мне немного подробнее рассказать о том, что я делаю.

Если в таблице существует запись (указывающая, что документ уже зарезервирован и может 'Я хочу уведомить пользователя о клиентской части.Я определю это, проверив Exists ... в T-SQL, а затем каким-то образом перенесу его обратно в Classic ASP (возвращаемое значение, параметр, поле набора записей).

Делает ли это какой-либо ответ более разумным?

Ответы [ 3 ]

1 голос
/ 06 октября 2010

Не очень хорошая идея.

Возвращаемое значение, выходной параметр или набор записей будут неопределенными, либо не будут установлены, либо будут частичными, если у вас возникла ошибка.Например, ошибка 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 не сделал ...?» ...

1 голос
/ 06 октября 2010

У меня есть эта функция в 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
1 голос
/ 06 октября 2010

Возвращает бит : "целочисленный тип данных, который может принимать значение 1, 0 или NULL."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...