T-SQL:列出范围中的所有变量

T-SQL:列出范围中的所有变量,sql,sql-server,tsql,Sql,Sql Server,Tsql,我试图在异常发生后打印SP执行范围内的所有变量,以便更深入地了解故障期间出现的错误。你怎么能做到 开始尝试 将@Var1声明为VARCHAR(MAX)=“变量1” 将@Var2声明为INT=5 结束尝试 开始捕捉 选择@ErMessage=ERROR\u MESSAGE(), @ErSeverity=错误\严重性(), @ErState=错误状态(); RAISERROR(@ErMessage,@ErSeverity,@ErState); --打印所有@变量值,如“@Var1:variable

我试图在异常发生后打印SP执行范围内的所有变量,以便更深入地了解故障期间出现的错误。你怎么能做到

开始尝试
将@Var1声明为VARCHAR(MAX)=“变量1”
将@Var2声明为INT=5
结束尝试
开始捕捉
选择@ErMessage=ERROR\u MESSAGE(),
@ErSeverity=错误\严重性(),
@ErState=错误状态();
RAISERROR(@ErMessage,@ErSeverity,@ErState);
--打印所有@变量值,如“@Var1:variable 1,…”
返回-1
端接

在引发错误之前,将变量的值添加到@ErMessage中,然后确保记录所有poped错误。您的变量必须在try之外声明。没有元数据函数、视图或其他东西提供有关变量的任何信息。您必须自己跟踪并写出它们(您可以使用
CONCAT
使其不那么繁琐,因为它会动态执行转换)。这应该不会太难,因为t-SQL中变量的作用域相当明显。(而且@EzLo的评论是错误的:变量是批处理范围的,而不是词汇范围的,因此
@Var1
CATCH
中可用,不管它在哪里声明。)