我正在尝试运行以下代码:
IF @tabla IS NULL
BEGIN
Declare @tabla VARCHAR(50)
END
当然,这给了我sql中未清除的变量错误,所以我认为,如果有像tempdb这样的临时表用于标量变量,我只能在该表中查找actaul名称“ tabla”。
答案 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”名称,也将无法实现此目的。变量的作用域在存储过程的持续时间内一直持续。