我已经将动态 SQL 用于许多任务并不断遇到相同的问题:打印动态 T-SQL 语句中使用的变量的值。
例如:
Declare @SQL nvarchar(max), @Params nvarchar(max), @DebugMode bit, @Foobar int
select @DebugMode=1,@Foobar=364556423
set @SQL='Select @Foobar'
set @Params=N'@Foobar int'
if @DebugMode=1 print @SQL
exec sp_executeSQL @SQL,@Params
,@Foobar=@Foobar
Run Code Online (Sandbox Code Playgroud)
上面代码的打印结果就是“Select @Foobar”。有没有办法动态打印正在执行的sql的值和变量名?或者在打印时,用实际值替换参数以便 SQL 可以重新运行?
我曾尝试创建一两个函数来完成类似的事情,但涉及数据类型转换、模式匹配截断问题和非动态解决方案。我很好奇其他开发人员如何在不手动打印每个变量的情况下解决这个问题。