是否可以在执行存储过程中输出所有当前变量值的列表?
对于上下文,当存储过程抛出错误以帮助进行故障排除时,知道变量值是多么好。当然,您可以手动将带有硬编码变量值的日志记录放在catch块中,但这不是干净的或可转移的。
您不能使用sys.parameters(即使它只是执行参数),因为动态SQL不起作用。是否有内置变量或sys表存储可在执行期间输出的当前作用域变量?
BEGIN TRY
DECLARE @Variable1 VARCHAR(64) = 'test'
-- Do stuff
END TRY
BEGIN CATCH
EXEC SpCustomLog @VariableValues = @Variable1 -- hardcoded
EXEC sp_execute 'SELECT @Variable1' -- not in scope/lost in build
END CATCH
答案 0 :(得分:1)
您正在使用局部变量,这是不可能从它的范围内获取的。正如TechNet也提到过:
变量的范围是Transact-SQL语句的范围 可以引用变量。变量的范围从 指出它被声明直到批处理或存储过程结束 宣布它。变量具有局部范围,仅可见 在定义它们的批次或程序中。
但是您可以使用SQLCMD来声明变量,该变量也可以从定义的批处理中访问(仅限于会话!)
以下是代码:
--deifne a variable using SQLCMD mode
:setvar myvar 10
PRINT $(myvar)--accessible
GO
PRINT $(myvar)--Also accessible
要激活SQLCMD模式,您需要从SQLCMD mode
菜单中选择Query
。