Нахождение, если переменная определена - PullRequest
1 голос
/ 09 декабря 2011

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

Пример

declare @var int
set @var = 1

if isdeclared(@var) == 0
begin
    declare @var int
    print @var
end
print @var

Ответы [ 3 ]

4 голосов
/ 09 декабря 2011

SQL Server анализирует код для объявления переменных, прежде чем он выполнит код.

Этот код будет работать нормально

if 1 = 0
begin
    declare @var int
    print @var
end
print @var

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

Возможно, вы захотите проверить, назначена ли переменная или нет.

if 1 = 0
begin
    declare @var int
    set @var = 1
    print @var
end

if @var is null 
begin
  set @var = 2
end

print @var
2 голосов
/ 09 декабря 2011

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

CREATE PROCEDURE myStoredProcedure (@var1 AS INT = NULL, @var2 AS INT = NULL)
AS
BEGIN

  DECLARE @var3 INT

  IF (@var1 IS NULL)
    SET @var3 = 'Nothing was passed in for @var1'

  IF (@var1 IS NULL AND @var2 IS NULL)
    SET @var3 = @var3 + ', '

  IF (@var2 IS NULL)
    SET @var3 = @var3 + 'Nothing was passed in for @var2'

  SELECT
    @var1, @var2, @var3

END

Даже если параметрынеобязательно, они все еще декальцированы и имеют значения по умолчанию (в этом случае NULL).Таким образом, вам не нужно проверять объявления, только значения.

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

Вы не можете Complie или Run Sql оператор в Sql Server Management Studio.

Скажем, в JS вы можете скомпилировать / выполнить блок кода, имеющий необъявленную переменную, и можете проверить, является ли переменнаяобъявляется или не используется typedef, но в Sql Server это невозможно до текущей версии.Спасибо за ваше время.

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