Sql语句使用规范
规范内容以及注意事项:
1、查询时候使用top 10 /top 100 和where 字句控制每次执行SQL 返回的结果集合,在满足业务需求的同时返回最小的结果。
2、使用数据投影的方式,选择前端程序需要的数据列,不允许使用select * from dbo.TableA的方式访问数据库中的列。
如:select userid , username , sex from dbo.TableA
3、尽量使用存储过程访问数据库中的数据。减少直接使用SQL 脚本访问数据库资源。
4、所有的SQL 语句都不允许使用系统表和系统字段,作为判断业务逻辑或者生成临时数据的依据。
如:select name from sys.sysobjects where xtype = ‘U’ 来查询所有的用户表。
5、编写长脚本需要注意缩进和换行,提高SQL脚本的阅读性。
如:
--查询Orders Select top 10 OrderID, UserID, ProductID From dbo.Orders Where … --插入Orders Insert into dbo.Orders (OrderID,UserID,ProductID) Values (1,2,3)
6、插入数据的语句需要把插入字段写全。
如上:
插入orders示例,不允许写成:insert into dbo.orders select 1,2,3
7、SQL 语句调用对象的时候需要加上对象的所有者,如果是默认的所有者,需要加上dbo。
如:
select userid,username from dbo.TableA 不要写成 select userid,username from TableA
8、如果需求没有强制要求返回的查询结果需要排序,SQL脚本后面不要加上Order By子句。
9、SQL语句如果设计到多表连接查询的时候,需要用表的别名,而不要使用“表名.列名”的方式。
如:select a.userid,a.username,b.sex From dbo.TableA a Join dbo.TableB b on a.userid = b.userid Where ……. 错误写法:select TableA.userid,TableA.username,TableB.sex From dbo.TableA Join dbo.TableB on tableA.userid = TableB.userid Where …….
10、在大量数据插入的情况下,把需要插入的数据整合起来一起插入数据库,会节省很多资源。
如:常规写法
Insert into dbo.TableA(id,name) Select 1,’aa’ Insert into dbo.TableA(id,name) Select 2,’bb’
建议写法:
Insert into dbo.TableA(id,name) Select 1,’aa’ Union all Select 2,’bb’
建议写法2:
Insert into dbo.tableA(id,name) Values(1,’aa’),(2,’bbb’)
如:常规写法:
Update a Set a.userno = a.userno+1 From dbo.TableA a Where a.username = ‘张三’ Go Update a Set a.userno = a.userno +1 From dbo.TableA a Where a.username = ‘李四’
建议写法
Update a Set a.userno = a.userno+1 From dbo.TableA a Where a.username in (‘张三’,’李四’)
11、 多表查询时候需要严格限制字段的别名,以防止SQL解析出现逻辑错误。
如:
select OrderID, UserID from dbo.Orders where UserID in ( select OrderID from dbo.UserInfo ) 如果作为子查询UserInfo中没有OrderID,SQL会到父查询中寻找OrderID字段,导致逻辑错误
12、引用的对象名或字段名,严格按照其原始大小写调用
如:查询Orders表
不能写成select orderid,…. From dbo.orders …
要写成select OrderID,…. From dbo.Orders …
防止数据库编码规则更改,导致无法找到对象。