SQL Server 2005 условно назначая переменные в SP - PullRequest
2 голосов
/ 12 июля 2011

Вот упрощенная версия хранимой процедуры, которую я пытаюсь написать в SQL Server 2005.

У меня такой вопрос:

Я объявил переменную @docid, для которой яЯ хочу назначить результаты запроса, когда я перебираю курсор, если нет точного совпадения, тогда я хочу выполнить другой запрос и попытаться найти следующее наилучшее совпадение.

Я попытался вставить тестчто говорит IF @docid IS NULL then BEGIN [second query].Это не работает, поскольку переменная @docid не будет Null, она просто сохранит предыдущее значение, пока не будут выполнены условия для первого запроса, и ей не будет присвоено новое значение.

Итак, как я могу сказать: «Если я пытаюсь присвоить docid переменной @docid, но нет совпадения на основе условий в запросе, тогда вместо этого запускаем следующий запрос или set @docid=''"? Любая помощь»будет признателен. Спасибо

declare @docid bigint,
        @account varchar(30)

While @@fetch_status=0
BEGIN
   Select @Docid=Docid
   FROM printdata 
   WHERE Account=@account

   IF @docid Is Null --Docid Is never Null once assigned a value
   BEGIN
     Select @Docid=Docid
     FROM printdata 
     WHERE balance=@balance
  END

1 Ответ

3 голосов
/ 12 июля 2011

Ну, я бы просто инициализировал @docid в NULL - тогда он будет НУЛЬ, если ничего не найдено:

declare @docid bigint,
        @account varchar(30)

While @@fetch_status=0
BEGIN
   SET @docid = NULL

   SELECT @Docid = Docid
   FROM printdata 
   WHERE Account = @account

   IF @docid IS NULL  --  @Docid *WILL* be NULL now if nothing is found!
   BEGIN
     SELECT @Docid = Docid
     FROM printdata 
     WHERE balance = @balance
  END
...