有没有广泛使用的SQL编码标准?SQL与C/C++类型的编程语言略有不同.真的不知道如何最好地格式化它的可读性.
不会称它为编码标准 - 更像是编码风格
SELECT T1.col1, T1.col2, T2.col3 FROM table1 T1 INNER JOIN ON Table2 T2 ON T1.ID = T2.ID WHERE T1.col1 = 'xxx' AND T2.Col3 = 'yyy'
大写保留字
新行上的主要关键词
在列之前不能习惯逗号
总是使用短有意义的表别名
带v的前缀视图
带sp的前缀存储过程(但不要使用为内置过程保留的"sp_")
不要为表添加前缀
表名奇异
我喜欢前面的逗号:
SELECT column1 , column2 , column3 , COALESCE(column4,'foo') column4 FROM tablename WHERE column1 = 'bar' ORDER BY column1 , column2
在我看来,这使得它最容易阅读和调试.
我知道这很长,但请耐心等待,这很重要.这个问题打开了一个很酷的蠕虫病毒.如果您不喜欢数据库块,请继续阅读.
并且,在任何人想到打倒我的回复之前,请参阅以下文章和关于锁定和重新编译的连接文章; SQL数据库中两个最具破坏性的资源.
http://support.microsoft.com/kb/263889
我可以很快打字,而且我不想输入下一个人.但是下面的要点非常密切,即使是更多的打字.我已经构建了自己的SP应用程序来为我做这件事.
我提出的要点非常重要!你甚至可以对自己说,"你在开玩笑,这不是问题",好吧,那你就没有读过上面的文章.并且,M $将这些点放入注释中是完全愚蠢的.这些问题应该是BOLD和SCREAMING.
我还做了很多编码来使用C#应用程序构建我的基本脚本来加速开发,这些实践非常合理(10年值得),使脚本SP更容易,特别是更快.
还有更多,但这是我为前60%所做的事情.
最佳做法
使用对象周围的括号,以便查询引擎在看到字段时明确地知道字段
使用相同的CASE作为表对象名称和字段名称
从应用程序调用SP时,请使用具有正确所有者和大小写的完全限定[dbo].[procName].不开玩笑!阅读上面的文章!
引用对象的所有者,以便明确知道安全性,而不必弄清楚
请勿使用"sp_",因为这指的是系统存储过程和开销
使用SET NOCOUNT ON和SET NOCOUNT OFF可以消除额外的开销,以跟踪存储过程中更新的记录数,除非您需要它们.通常情况下,你没有,你可以获得巨大的性能提升.
喜好
使用proc前缀存储过程
使用SEL,UPD,DEL,INS(或SELECT,UPDATE,DELETE,INSERT)对每个存储过程进行后缀
大写保留字
新行上的主要关键字(脚本)
在列之前使用逗号(脚本)
使用vw进行前缀视图
不要为表添加前缀
表名称单数
为标志名称添加后缀,如"_ByPK","_ OrderByLastName"或"_Top15Orders",以获取库存SP的变化
选择
CREATE PROC [dbo].[procTable_SEL] AS SET NOCOUNT ON SELECT [Column1] = T1.[col1] , [Column2] = T1.[col2] , [Column3] = T2.[col3] FROM [dbo].[Table] T1 INNER JOIN ON [dbo].[Table2] T2 ON T1.ID = T2.ID WHERE T1.[col1] = 'xxx' AND T2.[Col3] = 'yyy' SET NOCOUNT OFF GO
更新
CREATE PROC [dbo].[procTable_UPD] AS SET NOCOUNT ON UPDATE t1 SET [Column1] = @Value1 , [Column2] = @Value2 , [Column3] = @Value3 FROM [dbo].[Table1] T1 INNER JOIN ON [dbo].[Table2] T2 ON T1.[ID] = T2.[ID] WHERE T1.[col1] = 'xxx' AND T2.[Col3] = 'yyy' SET NOCOUNT OFF GO
插入
CREATE PROC [dbo].[procTable_INS] AS SET NOCOUNT ON INSERT INTO [Table1] ( [Column1] , [Column2] , [Column3] ) VALUES ( @Value1 , @Value2 , @Value3 ) SET NOCOUNT OFF GO
要么
CREATE PROC dbo.procTable_INS AS SET NOCOUNT ON INSERT INTO [table1] ( [Column1] , [Column2] , [Column3] ) SELECT [Column1] = T1.col1 , [Column2] = T1.col2 , [Column3] = T2.col3 FROM dbo.Table1 T1 INNER JOIN ON Table2 T2 ON T1.ID = T2.ID WHERE T1.[col1] = 'xxx' AND T2.[Col3] = 'yyy' SET NOCOUNT OFF GO
删除
CREATE PROC dbo.procTable_DEL AS SET NOCOUNT ON DELETE FROM [dbo].[Table1] T1 INNER JOIN ON [dbo].[Table2] T2 ON T1.[ID] = T2.[ID] WHERE T1.[col1] = 'xxx' AND T2.[Col3] = 'yyy' SET NOCOUNT OFF GO
如果你谷歌,那里有很多编码标准.例如,
数据库编码标准和指南
和
SQL SERVER数据库编码标准和指南完整列表