8.4). SQL语句规范:(详见数据库处理规范)
序号 测试项 测试内容 质量保证标准 问题属性 出错频率
S1 书写规范 语句全部用小写
S2 SQL语法 禁止使用“select * from ”语法。
禁止使用“insert into table_name values(?,?,……)”语法,
统一使用“insert into table_name (col1,col2,……) values(?,?,…...)”。
S3 SQL语法 如果在语句中有not in(in)操作,是否考虑用not exists(exists)来重写。
S4 类型转换 避免显式或隐含的类型转换。例如在where子句中numeric 型和int型的列的比较
S5 当SQL语句含有运算符时,运算符需与其他字符串用空格区分。否则容易导致以下类似问题。在语句select a–b from table 中, a,b均为变量。拼写该语句时,如果a=6, b= -3,则语句变为select 6--3 from table。--变为Sql的注释,语句报错
S6 查询优化 为提高索引的效率,查询路径优化(尤其是要尽力减少查询嵌套)。
S7 视图 使用静态视图,不允许动态创建视图,索引,存储过程等数据库对象
S8 Null 不能将Null 与 空串“”视为相同
S9 多表连接 1.SQL语句包含多表连接时,是否加上表的别名。
3. 子查询问题。对于能用连接方式或者视图方式实现的功能,不要用子查询。
例如:select name from customer where customer_id in ( select customer_id from order where money>1000)。应该用如下语句代替:select name from customer inner join order on customer.customer_id=order.customer_id where order.money>100。
3. 多表关联查询时,写法必须遵循以下原则,这样做有利于建立索引,提高查询效率。格式如下select sum(table1.je) from table1 table1, table2 table2, table3 table3 where (table1的等值条件(=)) and (table1的非等值条件) and (table2与table1的关联条件) and (table2的等值条件) and (table2的非等值条件) and (table3与table2的关联条件) and (table3的等值条件) and (table3的非等值条件)。
S10 复杂SQL语句 对复杂SQL语句必须单独测试:如多表查询拚写语句是否符合业务要求
S11 多数据库适配 1.Sql语句转换类。调用方法:SqlTranslator trans = new SqlTranslator(); destSql = trans.getSql(sourceSql, databaseType)。
2.提供SQLException信息转换。同一个SQL在不同数据库操作,JDBC返回的错误号以及错误信息不同。SQLException信息转换器将不同JDBC返回的错误号统一为以Sql Server7.0为准,错误信息仍以不同JDBC返回的错误信息为主