您遵循什么SQL编码标准?
有没有广泛使用的SQL编码标准?SQL与C/C++类型的编程语言略有不同。我真的不知道如何为可读性设置最佳格式。如果你在谷歌上搜索,有很多编码标准。比如说, 及您遵循什么SQL编码标准?,sql,coding-style,Sql,Coding Style,有没有广泛使用的SQL编码标准?SQL与C/C++类型的编程语言略有不同。我真的不知道如何为可读性设置最佳格式。如果你在谷歌上搜索,有很多编码标准。比如说, 及 我通常每行只保留很少的内容,即: select col1, col2, col3 from some_table tabl1 where col1 = 'some' and ( col2 = 'condition' or col2 = 'other' ) 我喜欢前面的逗号: SEL
我通常每行只保留很少的内容,即:
select
col1,
col2,
col3
from
some_table tabl1
where
col1 = 'some'
and
(
col2 = 'condition'
or col2 = 'other'
)
我喜欢前面的逗号:
SELECT
column1
, column2
, column3
, COALESCE(column4,'foo') column4
FROM
tablename
WHERE
column1 = 'bar'
ORDER BY
column1
, column2
在我看来,它使阅读和调试变得最简单。谷歌sql漂亮打印机或外观。我自己还没有试过,但它给了你一个好的开始。像Toad这样的大多数商业工具都有一个“格式化”选项,这也很有帮助。玩转-我建议使用,然后在该网站上进行美化。不会称之为编码标准-更像是编码风格
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_u2;-我认为这是多余的。相反,我喜欢在它们前面加上“功能单元”标识符。e、 g.我会打电话给存储过程来处理订单订单保存、订单获取ID、订单获取客户等。这会使它们在管理工作室中按逻辑进行分组,从而更难选择错误的订单。(GetOrderByProduct、GetCustomerById等) 当然,这是个人的偏好,其他人可能更喜欢把所有的Get sprocs放在一起,所有的Save sprocs,等等 就我的2c
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
这对我们很有效
这个实际的查询没有多大意义,因为我试图以快速构建为例。。。但这不是重点
- t_c代表类别表子查询或“临时类别”
- _在子查询中加下划线
- 别名列名,以便在查询上下文中有意义。e、 g.“活跃成员”
- 在新行的开头添加逗号可以更轻松地构建动态查询:
$sql .= ", c.another_column"
- 其他一切都很简单
最佳实践
- 在对象周围使用括号,这样查询引擎在看到某个字段时就可以知道该字段
- 使用与表对象名和字段名相同的大小写
- 从应用程序调用SP时,请使用具有正确所有者和大小写的完全限定的[dbo].[procName]。不是开玩笑!阅读上面的文章李>
- 引用对象的所有者,以便明确知道安全性,并且不必计算安全性
- 不要使用“sp_u3;”,因为它指的是系统存储的进程和开销
- 使用SET NOCOUNT ON和SET NOCOUNT OFF可以消除额外的开销,以跟踪存储过程中更新了多少记录,除非您需要它们。通常情况下,您不需要这样做,您可以获得性能的巨大提高
- 用proc为存储的proc加前缀
- 用SEL、UPD、DEL、INS(或SELECT、UPDATE、DELETE、INSERT)为每个存储过程添加后缀
- 保留字大写
- 新行上的主要关键字(脚本)
- 在列之前使用逗号(脚本)
- 使用vw为视图添加前缀
- 不要给表加前缀
- 表名单数
- 为标准名称添加后缀,如“_ByPK”、“_OrderByLastName”或“_Top15Orders”,以表示库存SP的变体
挑选
更新
插入 或
删除
蓝色的任何内容都是大写的
SELECT
,DELETE
,GO
,等等表名是单数的,就像容纳客户的表是客户表一样
链接表是
tablename\u到\u tablename
在工作表名称和参数之间使用。
范例
BEGIN
SELECT
Company.ID AS Company_ID,
Company.Client_Name,
Company.Website,
Office.Office_Name
FROM
Company_Office WITH(NOLOCK)
INNER JOIN Company WITH(NOLOCK) ON Company_Office.Company_ID = Company.ID
WHERE
END
我感到惊讶的是,我使用了近20年的编码风格没有出现在下面的列表中:
SELECT column1,
column2,
column3,
COALESCE(column4, 'foo') AS column4
FROM tablename
WHERE column1 = 'bar'
ORDER BY column1,
column2
我觉得这绝对是最具可读性的,但我承认
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
BEGIN
SELECT
Company.ID AS Company_ID,
Company.Client_Name,
Company.Website,
Office.Office_Name
FROM
Company_Office WITH(NOLOCK)
INNER JOIN Company WITH(NOLOCK) ON Company_Office.Company_ID = Company.ID
WHERE
END
create table
#tempTable (
col1 int,
col2 int,
col3 int
)
insert into
#tempTable (
col1,
col2,
col3
)
select
col1,
col2,
col3
from
Table3
inner join Table2
on Table1.col1 = Table2.col2
where col1 = 5
select
col2,
case when col1 = 3
then 'something'
else 'somethingelse'
end
from #tempTable
where
col1 = 5
and (
col2 = 5
or col3 in (
select field
from Table2
where
somecol = 2
and othercol = 5
)
)
SELECT column1,
column2,
column3,
COALESCE(column4, 'foo') AS column4
FROM tablename
WHERE column1 = 'bar'
ORDER BY column1,
column2
SELECT column1,
column2,
column3,
COALESCE(column4, 'foo') AS column4
FROM tablename
WHERE column1 = 'bar'
ORDER BY column1,
column2