2014-11-07 1 views
-1
CREATE PROCEDURE dbo.test2 
AS 
BEGIN 
    DECLARE @status as int 
    DECLARE @error as int 
    SET @status = 1 
    SET @Error = @@ERROR 
     UPDATE dbo.BView 
     SET bview='dar' 
     WHERE pt='foo' 

    IF @Error > 0 
     print 'ERROR' 
    else 
     SELECT @status as 'status' 
END; 

Почему этот запрос всегда возвращает значение по умолчанию локальной переменной @status независимо от того, что ей было назначено?SQL Server: выберите локальную переменную после некоторого процесса

status 
------ 
0 

версия Сервер: MS SQL Server 2014 Экспресс

+0

Я не слышал о переменных, имеющих значения по умолчанию. Если вы не инициализируете переменную, вы получите 'NULL' !! –

+0

Что вы назначили после того, как значение по умолчанию было 1? – knkarthick24

+0

Каков ожидаемый результат. – Veera

ответ

0

В SQL Server 2005: Запуск этого в вашем SQL Server.

Вы не можете присвоить значение по умолчанию при объявлении.

и отправить результат в команде.

DECLARE @status int 
SET @status = 1 
SELECT @status as 'status' 
+1

В чем разница в приведенном выше ответе? – knkarthick24

+0

результат 1 – antioxidant

+0

Я думаю, что это то, чего вы ожидаете. – Veera

0

Предложения. Хотя не может найти что-то не так, почему бы не сделать это обычным способом.

Всегда объявляйте переменную перед обновлением, вставкой или любым действием.

CREATE PROCEDURE dbo.sp_test2 
    AS 
    BEGIN 
    DECLARE @status as int 
    SET @status = 1 
     UPDATE dbo.BView 
     SET bview='dar' 
     WHERE pt='foo' 

    SELECT @status as 'status' 
    END 

вторых Всегда используйте ключевое слово AS затем переменную типа, а затем по размеру. Если вы не следуете переменному размеру, он в основном возвращает 0, в основном ноты типов nvarchar/varchar. Пример

DECLARE @status as nvarchar 

Часто возвращает 0 при использовании против строки длины 20. Где as,

Declare @status as nvacrhar(20) 

Работы отлично.

Возможно, произошла ошибка в ваших процессах обновления/вставки и я вижу, что u помещает объявление и процесс выбора в один и тот же узел (например, начало и конец). Вы можете проверить наличие ошибки.

CREATE PROCEDURE dbo.sp_test2 
    AS 
    BEGIN 
    DECLARE @status as int 
    DECLARE @error as int 
    SET @status = 1 
    SET @Error = @@ERROR 
     --Some statement, update or insert, let's say: 
     UPDATE dbo.BView 
     SET bview='dar' 
     WHERE pt='foo' 

IF @Error > 0 
    print 'ERROR' 
else 
    SELECT @status as 'status' 

END 

Эти предложения, хотя, я часто делаю этот путь, и это никогда не подводит меня. Лучшее понимание переменной в SQL Here и . Повышение ошибок в MSSql here и многие другие. Надеюсь, поможет.

+0

Большое спасибо за ценные предложения, я выполнил ваш результат кода: @ status = 0 и не возвращена ошибка :( – antioxidant