SQL学习笔记

1 distince 值能作用于列名 distince id  不能 distince *

2 时间函数 day(getdate()) 获取天  year(getdate()) 获取年  month(getdate())  月 datediff(day,getdate(),'2015-12-14') 获取时间差,dateadd 加时间 datepart  datename   获取时间的一部分

3 存储过程归根还是sql语句拼装  ,对于频繁用到的数据源 用临时表,可以吧临时表写成临时变量的形式,

表临时变量

 

4  select
'INSERT INTO [dbo].[Common_Street] VALUES('
+Convert(varchar(20),ID)
+','''+ StreetName+''''
+','''''
+','+Convert(varchar(20),SUBSTRING(StreetCode,0,7))
+','+Convert(varchar(20),IsDeleted)
+','''+ StreetCode+''''
+',0'
+')'
from TempStreet 利用拼接字符串,写批量插入语句,主要还是思维限制

 

5 临时表 临时变量 临时表变量

 

declare @ltable table
(
id int IDENTITY PRIMARY KEY not null,
ldate datetime null,
lmoney money null
)

 

6 存储过程 SET NOCOUNT ON:

当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
存储过程到最后还是sql语句的拼写和拼装

7
保证数据的完整性 要么全部执行 要不不执行
  • BEGIN TRAN:设置起始点。
  • COMMIT TRAN:使事务成为数据库中永久的、不可逆转的一部分。
  • ROLLBACK TRAN:本质上说想要忘记它曾经发生过。
  • SAVE TRAN:创建一个特定标记符,只允许部分回滚。

BEGIN TRAN Tran_Money --开始事务


DECLARE @tran_error int;
SET @tran_error = 0;
BEGIN TRY
if(select lmoney from ListData where lid=2)>0
begin
update ListData set lmoney=lmoney-10000 where lid=2
end
else
begin
SET @tran_error = 1
end
SET @tran_error = @tran_error + @@ERROR;
--测试出错代码,看看刘备的钱减少,关羽的钱是否会增加
--SET @tran_error = 1;
update ListData set lmoney=lmoney+10000 where lid=4
SET @tran_error = @tran_error + @@ERROR;
END TRY


BEGIN CATCH
PRINT '出现异常,错误编号:' + convert(varchar,error_number()) + ',错误消息:' + error_message()
SET @tran_error = @tran_error + 1
END CATCH


IF(@tran_error > 0)
BEGIN
--执行出错,回滚事务
ROLLBACK TRAN;
PRINT '转账失败,取消交易!';
END
ELSE
BEGIN
--没有异常,提交事务
COMMIT TRAN;
PRINT '转账成功!';
END


go

posted @ 2015-01-12 16:10  小菜鸟飞飞  阅读(180)  评论(0编辑  收藏  举报