是否有广泛使用的SQL编码标准? SQL与C/C ++类型的编程语言略有不同。真的不知道如何最好地格式化以提高可读性。
是否有广泛使用的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'
我喜欢逗号在前的方式:
SELECT
column1
, column2
, column3
, COALESCE(column4,'foo') column4
FROM
tablename
WHERE
column1 = 'bar'
ORDER BY
column1
, column2
依我看,这使得代码最易于阅读和调试。
http://support.microsoft.com/kb/263889
我可以相当快地打字,但是下面的要点我非常严格地遵循,即使这样会更多地输入。事实上,我已经构建了自己的SP应用程序来为我完成这些工作。所以这些要点非常重要!你甚至可能会对自己说,“你在开玩笑吧,这不是问题”,那么你肯定没有阅读上面的文章。而且,微软将这些要点作为注释放入其中,完全是愚蠢的。对我来说,这些问题应该是粗体和大声呼喊的。此外,我还编写了许多代码,使用C#应用程序构建基本脚本,以加快开发速度,并使脚本编写更加容易和快速。虽然还有其他要点,但这就是我在前60%的时间里做的事情。最佳实践
首选项
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
以下是关于PostgreSQL的非常好的博客,但这个主题适用于一般情况:
...我决定写可维护查询的优先事项:
避免无用的输入。
为表/视图使用别名。总是使用有意义的别名。
以某种方式缩进代码。
避免引号(是的,这就是为什么我讨厌Django)。
使用连接语法。
我同意保留保留字和其他标识符的大写形式,除了我的自己。
我通常每行只保留很少的内容,例如:
select
col1,
col2,
col3
from
some_table tabl1
where
col1 = 'some'
and
(
col2 = 'condition'
or col2 = 'other'
)
SELECT c.id
, c.name
, c.folder
, cs.num_users active_members
, cs.num_videos
FROM campaign c
JOIN campaign_stats cs
ON cs.campaign_id = c.id
JOIN (SELECT _c.id
, _c.name
FROM campaign _c
WHERE _c.type = 9) t_c
ON t_c.id = c.id
WHERE c.id IN (1,2,3)
AND cs.num_videos > 10
这对我们来说效果相当不错。
实际上,这个查询并没有太多意义,因为我只是试图快速建立一个示例...但这不是重点。
putting commas at the beginning of the new lines makes it easier to build dynamic queries:
$sql .= ", c.another_column"
everything else is straightforward.