|
|
1
43
|
|
|
2
18
我一直尝试使用的唯一技巧是:总是在靠近顶部的注释中包含示例用法。这对于测试您的SP也很有用。我喜欢包括最常见的示例,这样您甚至不需要SQL提示符或带有您最喜欢的调用的单独的.SQL文件,因为它就存储在服务器中(如果您存储了查看sp_的进程,sp_输出块或其他内容并获取一组参数,则这一点尤其有用)。 比如:
然后要测试或运行SP,只需在脚本中突出显示该部分并执行。 |
|
|
3
13
坏的:
更好,但看起来很凌乱,编码起来很痛苦:
最佳:
那么,“最佳”解决方案的错误处理在哪里呢?你不需要。见 将XACT_中止设置为ON |
|
|
4
12
|
|
|
5
3
在SQL Server中,我总是放一条语句,如果过程存在,它将删除该过程,这样我就可以在开发过程中轻松地点击“重新创建过程”。比如: IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'usp') AND type in (N'P', N'PC')) DROP PROCEDURE usp |
|
|
6
2
这在很大程度上取决于您在存储过程中执行的操作。但是,如果您在一个过程中执行多个插入/更新或删除,则最好使用事务。这样,如果一个部分出现故障,其他部分将回滚,使数据库处于一致状态。
如果需要,在过程中写入检查,以确保最终结果是正确的。我是一名ETL专家,我总是在尝试将数据导入表之前编写程序,以使数据得到清理和规范化。如果您是从用户界面执行操作,那么在proc中执行此操作可能不太重要,尽管我会让用户界面在运行proc之前进行检查,以确保数据适合插入(例如检查以确保日期字段包含真实日期、所有必需字段都有值等)
我不喜欢动态SQL,我不喜欢在存储过程中使用它。如果您在现有进程中使用动态SQl,请输入一个调试标志,允许您打印SQl而不是执行它。然后在注释中输入您需要运行的最典型的案例。您会发现,如果这样做,您可以更好地维护该进程。
如果您使用的是case语句或If语句,请确保您已经完成了测试,这些测试将命中每个可能的分支。你不测试的是会失败的。 |
|
|
7
1
存储过程只是存储的T-SQL查询。因此,您真正需要做的是更加熟悉T-SQL以及各种函数和语法。更重要的是,从性能的角度来看,您需要确保您的查询和底层数据结构以允许良好性能的方式匹配。即,确保索引、关系、约束等在需要时得到实施。 了解如何使用性能调优工具,了解执行计划的工作方式,以及这类性质的事情是如何达到“下一个级别”的 |
|
8
1
在SQL Server 2008中,使用TRY…CATCH构造,您可以在T-SQL存储过程中使用该构造,通过在每个SQL语句后检查@错误(通常是GOTO语句的使用),为异常处理提供比以前版本的SQL Server更优雅的机制。
与执行的每条语句都会重置的@@error不同,error函数检索到的错误信息在TRY…CATCH语句的CATCH块范围内的任何位置都保持不变。这些函数可以将错误处理模块化为单个过程,这样您就不必在每个CATCH块中重复错误处理代码。 |
|
|
9
0
具有错误处理策略,并在所有SQL语句上捕获错误。
|
|
10
0
For more explanations and T-SQL code samples please check this post |
|
|
11
0
以下是一些代码,用于证明SQL Server上没有多级回滚,并说明了如何处理事务:
|
|
|
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 3 年前 |
|
|
Nick Fleetwood · 调度语法的LINQ查询 4 年前 |
|
|
Mateen Bagheri · 选择表的计数并选择其自身 4 年前 |
|
Java · 使用交叉应用同时显示两列 4 年前 |