Rakib Ahmed Ответов: 2

Справка по синтаксису Sql - запросов


Я написал запрос select но какой из них правильный я немного но запутался ниже обоих запросов

IF @IDStatus IS NOT NULL
		IF EXISTS(SELECT 0 FROM tabBlobItem AS tbi		
				WHERE tbi.IDBlobItem = @IDBlobItem
				AND tbi.UrlRandom = @UrlRandom
				AND tbi.IDStatus = @IDStatus)
			BEGIN 		          
				SET @ReturnValue = 1
			END
			ELSE
			BEGIN
				SET @ReturnValue = 0
			END 
	
	Print @ReturnValue

IF @IDStatus IS NOT NULL
BEGIN --This i have added above this i have not written
		IF EXISTS(SELECT 0 FROM tabBlobItem AS tbi		
				WHERE tbi.IDBlobItem = @IDBlobItem
				AND tbi.UrlRandom = @UrlRandom
				AND tbi.IDStatus = @IDStatus)
			BEGIN 		          
				SET @ReturnValue = 1
			END
			ELSE
			BEGIN
				SET @ReturnValue = 0
			END 
END 
	
	Print @ReturnValue


Что я уже пробовал:

Я пробовал и то и другое но мне нужно знать какой из них правильный

2 Ответов

Рейтинг:
9

OriginalGriff

Я должен был бы согласиться с CHill60 - они одинаковы, но первая версия более удобна для обслуживания, потому что очевидно, что находится внутри и снаружи IF.

Точно так же, как C, C++ или C# используют фигурные скобки для начала и конца блока, их безопаснее и удобнее использовать, даже если они не нужны:

if (condition)
   BEGIN
   if (otherCondition)
      BEGIN      
      statement;
      END
   else
      BEGIN
      statement;
      END
   END
SELECT ...
Очевидно, что выбор если и не условный, то все же условный.
Это также очевидно, если вы оставите их в стороне:
if (condition)
   if (otherCondition)
      statement;
   else
      statement;
SELECT ...
Но... SQL не применяет отступы, все они могут быть в одной строке:
if (condition) BEGIN if (otherCondition) BEGIN statement; END else BEGIN statement; END END SELECT ...
Это трудно понять, но довольно очевидно, что происходит.
Но уберите их отсюда:
if (condition) if (otherCondition) statement; else statement; SELECT ...
И подумайте об этом на досуге!

Добавление их (и отступы вашего кода) означает, что, когда вам нужно изменить его, гораздо легче понять, что происходит.


Рейтинг:
17

CHill60

И то, и другое одинаково верно.

Операторы IF в SQL могут обрабатывать только один оператор или блок операторов. Вы можете обрабатывать множество операторов, заключая их в BEGIN. . . END - который определяет один оператор (блок). Ссылка ЕСЛИ...ELSE (Transact-SQL) - SQL Server | Microsoft Docs[^]

Вы могли бы также использовать

IF @IDStatus IS NOT NULL
		IF EXISTS(SELECT 0 FROM tabBlobItem AS tbi		
				WHERE tbi.IDBlobItem = @IDBlobItem
				AND tbi.UrlRandom = @UrlRandom
				AND tbi.IDStatus = @IDStatus)
			SET @ReturnValue = 1
			ELSE
			SET @ReturnValue = 0
	
	Print @ReturnValue
На мой взгляд использование BEGIN . . .END помогает прояснить ваши намерения


OriginalGriff

:большой палец вверх: