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