我想编写正确的 SQL 查询,我需要了解 SQL 格式的标准。我不是指逻辑或效率,我指的是正确的缩进和空格。在命令的情况下我也很有趣。
是否有任何正确的 SQL 格式化模式(标准)?
我想编写正确的 SQL 查询,我需要了解 SQL 格式的标准。我不是指逻辑或效率,我指的是正确的缩进和空格。在命令的情况下我也很有趣。
是否有任何正确的 SQL 格式化模式(标准)?
查看数据库编码标准和指南。它自 2008 年以来已经过时,但我还找不到更好的东西。几个月前我正在寻找这个,看起来真的很好。
我正在查看 oracle 和 mysql 站点,但“怪物”从未发表过正式论文。
好吧,我现在不开始讨论大写表名,但通常你会考虑如何格式化选择/更新/插入/删除语句。在 Pablo Dominguez 的文档 giben 中,他们建议像这样格式化选择
select t.Task_Id,
t.Course_Id,
t.Due_Dt,
t.Start_Time,
t.End_Time,
t.Name,
et.Completed_Flag,
et.Completed_Dt
from BusyWork.dbo.TB_TASK t
inner join BusyWork.dbo.ENROLLMENTTASK et
on t.Task_Id = et.Task_Id
where t.Due_Dt >= @pStartDate
and t.Due_Dt <= @pEndDate
and et.Member_Id = @pMemberId
order by t.Due_Dt,
t.Start_Time
我可以说(对我来说)阅读这样的脚本非常困难,尤其是其中的from
部分,所以在我们的系统中,我们使用这样的约定
select
t.Task_Id,
t.Course_Id,
t.Due_Dt,
t.Start_Time,
t.End_Time,
t.Name,
et.Completed_Flag,
et.Completed_Dt
from BusyWork.dbo.TB_TASK as t
inner join BusyWork.dbo.ENROLLMENTTASK as et on t.Task_Id = et.Task_Id
where
t.Due_Dt >= @pStartDate and t.Due_Dt <= @pEndDate and
et.Member_Id = @pMemberId
order by t.Due_Dt, t.Start_Time
在update
,delete
语句中我总是试图写from
子句,所以我总是可以很容易地重写update
/delete
来select
测试它
update BusyWork.dbo.TB_TASK set
Due_Dt = getdate(),
Name = 'updated'
from BusyWork.dbo.TB_TASK as T
inner join BusyWork.dbo.ENROLLMENTTASK as et on t.Task_Id = et.Task_Id
where
t.Due_Dt >= @pStartDate and t.Due_Dt <= @pEndDate
delete BusyWork.dbo.TB_TASK
from BusyWork.dbo.TB_TASK as T
inner join BusyWork.dbo.ENROLLMENTTASK as et on t.Task_Id = et.Task_Id
where
t.Due_Dt >= @pStartDate and t.Due_Dt <= @pEndDate
在insert
语句中,我试图避免values
从句,因此我也可以轻松地将语句重写为 plain select
。始终在插入中明确指定列以避免在从表中添加/删除字段后出现问题。还尝试使用别名作为列名,以便在使用普通测试时检查正确的值select
insert into BusyWork.dbo.TB_TASK
(
Due_Dt,
Name
)
select
getdate() as Due_Dt,
'New' as Name
另一条规则 - 始终为列和表/视图/表函数使用别名。将来修改语句会更容易,并且可以帮助您在更改表架构时避免一些讨厌的错误。