查找是否定义了变量

时间:2011-12-09 09:14:35

标签: sql sql-server sql-server-2008 tsql

我必须实现一个模块,该模块期望作为参数一些变量声明。我必须找到一种验证这些变量的方法,以便我没有预定义它们。

实施例

declare @var int
set @var = 1

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我不完全确定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)。因此,您不需要检查声明,只需要检查值。

答案 2 :(得分:1)

Complie中无法RunSql Server Management Studio Sql语句。

说,在JS中,您可以编译/执行具有未声明变量的代码块,并且可以使用typedef检查变量是否声明,但在Sql Server中,直到当前版本才可以。谢谢你的时间。