我必须实现一个模块,该模块期望作为参数一些变量声明。我必须找到一种验证这些变量的方法,以便我没有预定义它们。
实施例
declare @var int
set @var = 1
if isdeclared(@var) == 0
begin
declare @var int
print @var
end
print @var
答案 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
中无法Run
或Sql Server Management Studio
Sql语句。
说,在JS
中,您可以编译/执行具有未声明变量的代码块,并且可以使用typedef
检查变量是否声明,但在Sql Server中,直到当前版本才可以。谢谢你的时间。