月度归档:2018年02月

mssql sqlserver 存储过程处理错误的方法分享


摘要:
下文主要讲述sql server存储过程中处理错误的方法分享



一、存储过程中使用事务的自动回滚错误

在存储过程中,我们可以通过设置 Set XACT_ABORT ON 属性,并将所有的脚本代码放入一个事务中,
当存储过重产生错误时候,则自动回滚错误信息

   Create Proc  procTest
        @p1 varchar(10)
      as 
       begin
		set NOCOUNT ON;
        set XACT_ABORT ON;
        begin tran
		     [操作表代码] 
        commit tran 
       end
 

注意事项:
1.在存储过程中执行事务,当我们开启了XACT_ABORT属性,执行事务出错,则会自动回滚事务中所有代码,如果在事务中未开启此属性,那么事务中出错将继续执行,并不能达到事务保证操作的完整性。
2.set nocount no 不输出脚本操作影响了多少行

二、事务内进行判断

每执行一条sql脚本时,我们对脚本进行相关判断,是否存在错误信息,如果存在,则立即goto 回滚事务,如下所示:

  create proc procTest
    @p1 varchar(10)
  as 
   begin
      begin tran 

		 update table set filed ='' where keyId =''
		 if @@error <>0  goto err;
 
		 insert into table (field)values('')
	     if @@error <>0  goto err;

	  commit tran
	  return;
	  err:
	  rollback tran
	  return;
   end
 


注意事项:
@@error 只能捕获前一条sql语句是否存在错误


三、存储过程中使用try、catch捕获错误

下文讲述在存储过程中使用 try catch 关键字捕捉错误信息

   create proc procTest
    @p1 varchar(10)
  as 
   begin 
	   Begin  try

         update table set filed ='' where keyId =''
		 insert into table (field)values('')
	   
        End    try
        Begin  Catch
                  SELECT ERROR_NUMBER()  AS  ErrorNumber,
                       ERROR_MESSAGE()  AS  ErrorMessage;
        End    Catch
 
   end
  


注意事项:
ERROR_NUMBER() 返回错误号。
ERROR_SEVERITY() 返回严重性。
ERROR_STATE() 返回错误状态号。
ERROR_PROCEDURE() 返回出现错误的存储过程或触发器的名称。
ERROR_LINE() 返回导致错误的例程中的行号。
ERROR_MESSAGE() 返回错误消息的完整文本。该文本可包括任何可替换参数所提供的值,如长度、对象名或时间。

mssql sqlserver 规范使用方法分享


摘要:
下文主要讲述sql server表设计及脚本编写中,相关规范


———————————
数据表字段类型选择:
字符类型根据长度选择合适的varchar nvarchar类型
涉及金额的建议选择 money类型
带小数位的建议使用 numeric decimal类型
自定义标识列建议使用bigint类型
时间类型根据要求选择 date datetime time smalldatetime
尽量避免使用 xml text ntext image 类型
————————————–
表设计
同一业务模块的表名设置为具有相同标识前缀
列设计
同样功能的字段,在所有表中都应该具有相同的名称叫法和类型定义
所有列禁止存在null值
表相关设计
表尽量设置合理的主键,尽量使用单字段主键
索引设计:
用于连接表的字段,尽量设置索引
order by 中涉及的列,尽量设置为索引
索引include 不要包含过多的列
单张表不要拥有过多的索引

———脚本编写—————–
脚本编写中,禁止进行复杂的计算
脚本编写中,避免使用select * :减少查询次数 和不必要的返回
脚本编写中,禁止在索引列上进行计算
少使用游标
少使用触发器
脚本编写中,参数类型和表中的列类型,需一致
脚本编写中,避免拼接sql,采用参数化处理
脚本编写中,尽量减少join表的个数
脚本编写中,限制in的个数,因为不合理的in会导致”DB估算执行计划”错误。
避免使用大事务,会导致死锁
尽量使用union all 替换union 组合表
脚本查询中,数据尽量按页 按需返回

mssql sql server ceiling floor 函数用法简介


摘要:
下文主要讲述ceiling、floor函数的功能及举例说明



一、ceiling floor函数功能简介

ceiling函数的功能:返回大于或等于”当前输入参数”的最小整数。
floor函数功能: 返回小于或等于”当前输入参数”的最大整数。

二、ceiling floor函数举例说明

———————–

 select ceiling(1.9) ---返回2
select ceiling(-2.1) --返回-2
select ceiling(-2.6) --返回-2
select ceiling(1.2)  --返回2
----------------------------
select floor(1.9) ---返回 1
select floor(-2.1) --返回-3
select floor(-2.6) --返回-3
select floor(1.2)  --返回1