1.把系统里所有用全局临时表的改成局部临时表,不然并发高时会引发对象已经存在的问题,不要用##要用#。
2.int 不能写成 id = ‘1‘,比如Select * from A where ID=‘1‘,因为本身的ID为int,那么你写的索引就没起到作用,而且SQL里面还需要转换类型,影响性能。
3.print error_message() 输出错误信息 可用于调试存储过程或其他批量SQL。也可以输入其他信息,print ‘test1‘;这个可以结合try cath,具体代码如下:
BEGIN TRY BEGIN INSERT INTO A (ID,Name)VALUES (1,‘test1‘) END END TRY BEGIN CATCH PRINT (‘仓库库存时没有找到对应的记录,所以需要新增一条,新增时失败!‘ + ERROR_MESSAGE()); END CATCH
4.自动生成的ID,不用@@IDENTITY而用SCOPE_IDENTITY();就是新增表的时候,字段定义为字段1 int identity(1,1)
5.一般的金额和数量字段,没设约束,默认为null,都要设isnull(字段,0),或者新建表的时候,设置字段不为NUll,默认值为0,如:[字段] int NOT NULL DEFAULT(0)。
6.查询数据很多的时候,建议用with(nolock),select 字段1,字段2 from A with(nolock) 。
7.查数据额时候,尽量不要写*,比如select * from Person with(nolock),这样写select 字段1,字段2 from Person with(nolock)。
8.SQL里面判断不能为空,应该这样写(@Effect IS NOT NULL AND @Effect <> ‘‘),反之(@Effect IS NULL or @Effect = ‘‘)。
9.事务的使用:BEGIN TRAN :开始事务;COMMIT TRAN:提交事务;ROLLBACK TRAN:事务回滚。具体如下:
BEGIN TRY BEGIN TRAN; --开始事务 BEGIN INSERT INTO A (ID,Name)VALUES (1,‘Test1‘) END INSERT INTO B (ID,Name) VALUES (2,‘Test2‘) END COMMIT TRAN;--提交事务 END TRY BEGIN CATCH ROLLBACK TRAN;--事务回滚 END CATCH