首页 > 代码库 > Transact-SQL 学习小结

Transact-SQL 学习小结

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‘)    ENDEND TRYBEGIN 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 TRYBEGIN CATCH    ROLLBACK TRAN;--事务回滚END CATCH