获取所有当前标量变量的列表

时间:2019-09-12 14:47:46

标签: sql sql-server

我正在尝试运行以下代码:

IF @tabla IS NULL
BEGIN
      Declare @tabla VARCHAR(50)
END

当然,这给了我sql中未清除的变量错误,所以我认为,如果有像tempdb这样的临时表用于标量变量,我只能在该表中查找actaul名称“ tabla”。

2 个答案:

答案 0 :(得分:1)

不,没有视图可以在代码中查找变量。未声明的变量将阻止代码编译,因此无法存储。如果要查找在不同代码中使用的变量的定义,则需要在整个代码中进行搜索,这可能会给您带来误报。

SELECT *
FROM sys.sql_modules
WHERE definition LIKE '%@tabla[^A-Za-z0-9]%'

唯一可以存储变量的是sys.parameters表。顾名思义,它仅显示参数。

SELECT o.name AS ObjectName,
        p.name AS ParameterName,
        p.parameter_id,
        t.name AS type,
        p.max_length,
        p.precision, p.scale,
        p.is_output,
        p.has_default_value,
        p.is_nullable
        --,any other columns
FROM sys.parameters p
JOIN sys.objects    o ON p.object_id = o.object_id
JOIN sys.types      t ON p.user_type_id = t.user_type_id;

答案 1 :(得分:0)

  

必须声明标量变量“ @tabla”

由于错误状态,您必须在IF语句之前声明“ @tabla”。即使从系统表中查找正确的“ tabla”名称,也将无法实现此目的。变量的作用域在存储过程的持续时间内一直持续。