![]() |
1
7
我认为答案在于SQL是一种基于集合的语言,附带了一些过程性的东西。由于设计人员是用基于集合的术语进行思考的,所以他们不认为其他语言具有的普通类型的调试是重要的。然而,我认为有些情况正在改变。您可以在SQL Server 2008中设置断点。我还没有真正使用它,因为在它工作之前,您必须拥有SQL Server 2008数据库,而且我们的大多数数据库仍然是SQL Server 2000。但它是可用的,它确实允许你逐步完成事情。当select语句有150行长,并且它知道语法不正确,但它不能准确指出位置时,仍然会遇到问题,因为它是一个命令。 就我个人而言,当我编写一个较长的程序性SP时,我会在一个测试模式中构建,包括向我展示我所做的事情的结果、我感兴趣的特定点的关键变量的值,以及打印让我知道已完成哪些步骤的语句,然后在完成后将整个过程回滚。这样我就可以看到如果它真的运行会发生什么,但如果我弄错了,就不会损坏数据库中的任何数据。我觉得这很有用。它可以大大增加你的进程的大小。我有一个我使用的模板,其中包含了我需要设置的大部分结构,所以我不需要花费太多时间来完成。尤其是因为我从未添加过插入。在不首先测试关联的select以确保我拥有所需的记录的情况下更新或删除proc。 |
![]() |
2
4
我不认为这会使调试器/IDE无法更精确地识别错误,但我怀疑这会使识别更困难。 |
![]() |
3
1
在每个事务或重要逻辑片段之前和之后,我将存储过程名称、步骤时间戳和行计数(如果相关)写入日志表。我发现当我完成这项工作后,我通常可以在几分钟内缩小问题范围。
|
![]() |
4
1
至于断点和单步执行代码,您可以使用MS SQL Server实现这一点(在我看来,在2005+上比在2000上更容易实现)。 对于简单的情况,早期的开发调试,有时神秘的消息通常足以解决错误——语法错误,不能用Y来做X。如果我在一个艰难的存储过程中,我会在存储过程文本上恢复到“printf调试”,因为它既快又简单。使用您选择的数据库一段时间后,简单的问题就会变得老掉牙,您可以从容应对。
|
![]() |
5
0
|
![]() |
Community wiki · SQL语法新手 1 年前 |
|
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |