我已经将动态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
上面代码的打印结果只是“选择@Foobar”。有什么方法可以动态打印正在执行的sql的值和变量名?还是在执行打印时,将参数替换为其实际值,以便SQL可重新运行?
我玩过创建一个或两个函数来完成相似的工作,但是却涉及数据类型转换,模式匹配截断问题和非动态解决方案。我很好奇其他开发人员如何在不手动打印每个变量的情况下解决此问题。