当前位置:  开发笔记 > 编程语言 > 正文

你遵循什么SQL编码标准?

如何解决《你遵循什么SQL编码标准?》经验,为你挑选了4个好方法。

有没有广泛使用的SQL编码标准?SQL与C/C++类型的编程语言略有不同.真的不知道如何最好地格式化它的可读性.



1> DJ...:

不会称它为编码标准 - 更像是编码风格

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_")

不要为表添加前缀

表名奇异


就个人而言,我不想在对象名称前加上前缀.我认为没有前缀它会更容易和更清晰,当我使用对象时,我应该已经知道它是什么类型的对象(就像任何阅读我的代码的人一样).
请确保在"sp"后面没有下划线:http://www.sqlmag.com/Articles/ArticleID/23011/23011.html?Ad = 1.我相信你已经知道了......这主要是针对那些可能调整你风格的人.

2> Ryan Guill..:

我喜欢前面的逗号:

SELECT
      column1
    , column2
    , column3
    , COALESCE(column4,'foo') column4
FROM
    tablename
WHERE
    column1 = 'bar'
ORDER BY 
      column1
    , column2

在我看来,这使得它最容易阅读和调试.


我发现这种风格很刺激,但我认为这是个人偏好.
除非你需要评论第一行.最后用逗号进行操作也可以对任何行进行注释,但最后一行除外.这是同一件事.
你用前面的逗号注意到的更大的区别是,如果你错过了一个逗号,它显而易见.它脱颖而出.
这也让您可以评论单行而不必担心逗号.

3> SnapJag..:

我知道这很长,但请耐心等待,这很重要.这个问题打开了一个很酷的蠕虫病毒.如果您不喜欢数据库块,请继续阅读.

并且,在任何人想到打倒我的回复之前,参阅以下文章和关于锁定和重新编译的连接文章; 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



4> Rob Prouse..:

如果你谷歌,那里有很多编码标准.例如,

数据库编码标准和指南

SQL SERVER数据库编码标准和指南完整列表


谷歌把我带到了这里......
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有