Bre*_*t D 10 sql-server dynamic-sql
我已经将动态 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 可以重新运行?
我曾尝试创建一两个函数来完成类似的事情,但涉及数据类型转换、模式匹配截断问题和非动态解决方案。我很好奇其他开发人员如何在不手动打印每个变量的情况下解决这个问题。
完成此操作的一种方法可能是您已经完成的操作,那就是替换您的行:
if @DebugMode=1 print @SQL
Run Code Online (Sandbox Code Playgroud)
和
if @DebugMode=1 print @SQL + ' ' + convert(nvarchar(max), @Foobar)
Run Code Online (Sandbox Code Playgroud)
而且您必须对所有变量都这样做,您需要手动转换它们以避免转换错误。
您也可以以类似的方式使用 RAISERROR:
if @DebugMode=1 RAISERROR (N'We used a value of %d for @Foobar', 10, 1, @Foobar)
Run Code Online (Sandbox Code Playgroud)
HTH
归档时间: |
|
查看次数: |
5341 次 |
最近记录: |