Для чего выберите «1» в следующей сохраненной процедуре - PullRequest
0 голосов
/ 30 сентября 2010
BEGIN    
 IF EXISTS(SELECT  * FROM Table1 WHERE ID=@ID)      
  BEGIN     
    UPDATE Table1 SET Name=@Name  WHERE ID=@ID    
    SELECT '1'   
  END    
 ELSE     
  SELECT '0'    
END  

Это строка нет.стола или что?Также "IF EXISTS" проверяет что?таблица или если идентификатор существует или нет ??

Ответы [ 4 ]

4 голосов
/ 30 сентября 2010

Похоже, кто бы ни написал, что хранимая процедура использует это как возвращаемое значение, чтобы указать успех или неудачу.

Выполнение этих действий приведет к появлению одной строки с одним столбцом, возвращаемым для каждого вызова процедуры.

Правильный способ справиться с этим - использовать возвращаемое значение хранимой процедуры, а не возвращать один столбец в одну строку:

BEGIN
    IF EXISTS(SELECT * FORM Table1 WHERE ID = @ID)
    BEGIN
        UPDATE Table1 SET Name = @Name WHERE ID = @ID
        RETURN 1
    END

    RETURN 0
END
3 голосов
/ 30 сентября 2010

IF EXISTS проверяет, есть ли в Таблице 1 строка с данным ID.Если есть строка, она обновит эту строку с заданным именем.Выбор «1» возвращает «1», а выбор «0» возвращает «0».«1» или «0» будет указывать, найдена строка или нет.

0 голосов
/ 30 сентября 2010

Выбор '1' используется, чтобы указать, что Таблица1 содержит значение идентификатора @ID (параметр) был обновлен. Выбор «0» означает, что Таблица1 не содержит значения идентификатора @ ID.

0 голосов
/ 30 сентября 2010

Предположительно, некоторый вызывающий код проверяет это значение, чтобы определить, была ли строка обновлена ​​или нет.

Вместо того, чтобы проверять и обновлять (доступ к двум таблицам), вы могли бы также сделать это.

 UPDATE Table1 SET Name=@Name  WHERE ID=@ID    
 SELECT CASE WHEN @@Rowcount = 0 THEN 0 ELSE 1 END

Если id это ПК, то вы можете просто сделать

 UPDATE Table1 SET Name=@Name  WHERE ID=@ID    
 SELECT  @@Rowcount 

Обратите внимание, что если SET NOCOUNT не включено, то количество затронутых строк все равно будет передано клиентскому приложению.

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