我想问一下是否有可能在程序中使用一些调试选项?在使用Visual Studio之前,我可以使用F5键来启动调试。我也可以使用SQL来启动调试吗?当我试图解决一些查询或查看程序后面的步骤时,我希望查看运行过程中的步骤
vxf3dgd41#
总的来说,这种调试风格不适合数据库工作,因为您需要遍历代码,手动逐行推进执行,并使用断点和窗口显示当前变量内容。正确地进行调试意味着在遍历代码时创建并保持锁,这取决于环境(当然,我们中没有人会在生产中这样做),这可能会导致严重的阻塞问题。此外,查看临时表的内容可能会有很大的问题。正如其他人已经说过的,你最好手动设置输入值,并一次运行选定的代码块,用PRINT和SELECT语句显示在任何给定点发生的事情。这可能很慢,有点笨拙,但非常有效。
vjhs03f72#
我曾经用这个程序中的一种格式在整个程序中打印消息。也是为了防止向应用程序发送消息。它检查它是否是生产服务器。(使用设置表)。
CREATE PROCEDURE dba.Usp_Util_TraceLog @ProcId INT, @Message NVARCHAR(4000) = '', @Param0 NVARCHAR(255) = NULL, @Param1 NVARCHAR(255) = NULL, @Param2 NVARCHAR(255) = NULL, @Param3 NVARCHAR(255) = NULL AS BEGIN SET NOCOUNT ON; IF (mon.fn_Setting_Get('is_production_envirement') = 1) RETURN; SET @Param0 = ISNULL(@Param0, ''); SET @Param1 = ISNULL(@Param1, ''); SET @Param2 = ISNULL(@Param2, ''); SET @Param3 = ISNULL(@Param3, ''); SET @Message = REPLACE(@Message, '{0}', @Param0); SET @Message = REPLACE(@Message, '{1}', @Param1); SET @Message = REPLACE(@Message, '{2}', @Param2); SET @Message = REPLACE(@Message, '{3}', @Param3); DECLARE @proc_name sysname; DECLARE @schema_name sysname; SELECT @proc_name = o.name, @schema_name = s.name FROM sys.objects AS o INNER JOIN sys.schemas AS s ON s.schema_id = o.schema_id WHERE o.object_id = @ProcId; DECLARE @msg NVARCHAR(4000)= CONCAT('[', @schema_name, '].[', @proc_name, ']: ', @Message) PRINT @msg; END; GO
2条答案
按热度按时间vxf3dgd41#
总的来说,这种调试风格不适合数据库工作,因为您需要遍历代码,手动逐行推进执行,并使用断点和窗口显示当前变量内容。正确地进行调试意味着在遍历代码时创建并保持锁,这取决于环境(当然,我们中没有人会在生产中这样做),这可能会导致严重的阻塞问题。此外,查看临时表的内容可能会有很大的问题。
正如其他人已经说过的,你最好手动设置输入值,并一次运行选定的代码块,用PRINT和SELECT语句显示在任何给定点发生的事情。这可能很慢,有点笨拙,但非常有效。
vjhs03f72#
我曾经用这个程序中的一种格式在整个程序中打印消息。也是为了防止向应用程序发送消息。它检查它是否是生产服务器。(使用设置表)。