T-SQL: если существует, всегда возвращать true? - PullRequest
1 голос
/ 11 мая 2010

Как вы думаете, хранимая процедура всегда возвращает 1?

Меня беспокоит, если существует (..)

    BEGIN

    DECLARE @IsUserExisting bit

 SET NOCOUNT ON

    IF Exists
 (
  Select null FROM G_User WHERE
    SamAccountName = @SamAccountName
   AND NetBIOSDomainName = @NetBIOSDomainName   
 )
  BEGIN
     SET @IsUserExisting = 1     
  END
    ELSE
  BEGIN
     SET @IsUserExisting = 0    
  END

 Select @IsUserExisting

END

Ответы [ 4 ]

2 голосов
/ 11 мая 2010

Нет, если предложение WHERE ничего не возвращает, если IF Exists () возвращает false и, следовательно, @IsUserExisting имеет значение 0.

1 голос
/ 08 декабря 2011
BEGIN

    DECLARE @IsUserExisting bit

 SET NOCOUNT ON

    IF Exists
 (
  Select null FROM G_User WHERE
    SamAccountName = @SamAccountName
   AND NetBIOSDomainName = @NetBIOSDomainName   
 )
  BEGIN
     SET @IsUserExisting = 1     
  END
    ELSE
  BEGIN
     SET @IsUserExisting = 0    
  END

 Select @IsUserExisting

END

Я пытался использовать это, но когда истина, он устанавливает @IsUserExisting = -1 !!

1 голос
/ 11 мая 2010

Макис уже ответил на ваш вопрос, но я хотел бы предложить следующее

Вы можете упростить свой код с помощью:

declare @IsUserExisting bit;
set @IsUserExisting = (
select count(*) from G_User
where SamAccountName = @SamAccountName and
      NetBIOSDomainName = @NetBIOSDomainName);

select @IsUserExisting;

Я думаю, что в вашем случае следующее даже короче.

select count(*) from G_User
where SamAccountName = @SamAccountName and
NetBIOSDomainName = @NetBIOSDomainName)
0 голосов
/ 16 июля 2010

Вы не должны использовать Select Count (), если вы только проверяете, существует ли что-то. Хотя в этом случае он должен возвращаться довольно быстро, если EXISTS () вернет true сразу же, когда найдет подходящую запись Выберите Счетчик (), чтобы просмотреть все записи, чтобы получить полный счет, добавив ненужные накладные расходы.

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