`
zheyiw
  • 浏览: 997242 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

sql基础_Case_特殊函数_异常_脏读

    博客分类:
  • SQL
sql 
阅读更多
--脏读
set transaction isolation level read uncommitted;  


--不带参数
SELECT  CASE    
        WHEN 11=1 THEN '十一'   
        WHEN 12=12 THEN '十二'   
        ELSE '零'   
        END  
--带参数
DECLARE @a VARCHAR(20)
SELECT  CASE @a 
        WHEN 11 THEN '十一' 
        WHEN 12 THEN '十二' 
        ELSE '零' 
        END


------关于异常抛出和捕获-----

在存储过程中使用下面的预计抛出异常
RaisError(16, 1, @ErrorMsg) 
RaisError(90018, 16, 1, @ErrorMsg) 
其中 @ErrorMsg 为异常消息(字符串)
在C#中调用存储的地方就会收到异常,此时就可以捕获异常显示异常消息


------特殊的函数:
1, isnumeric( expression )
  -- 返回值 1 | 0,判断是否是数字类型。
  数值类型包括(int、bigint、smallint、tinyint、numeric、money、smallmoney、float、decimal、real)
  示例:
select * from tablename where isnumeric(columnname)<> 1;


2, isdate( expression )
  -- 如果 expression 是有效的 date、time 或 datetime 值,则返回 1;否则返回 0。
  示例:
if isdate('2009-05-12 10:19:41.177') = 1
  print '有效的日期'
  else
  print '无效的日期'


3,  patindex( '%pattern%' , expression )
  -- 返回指定表达式中某模式第一次出现的起始位置;
  -- 如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
  'pattern' : 一个通配符字符串。pattern 之前和之后必须有 % 字符(搜索第一个或最后一个字符时除外)。
  expression : 通常为要在其中搜索指定模式的字符串数据类型列。
  示例:
select patindex('%BB%','AA_BB_CC_DD_AA_BB_CC_DD')
  -- 返回:4
  上面示例返回的是第一个‘BB’的开始位置。
  其实,使用 charindex 函数也能实现上面示例的查询,如下:
select charindex('BB','AA_BB_CC_DD_AA_BB_CC_DD')
  --返回:4
  patindex 函数与 charindex 函数的区别: 
select patindex('%[0-9][A-Z]%', 'AA_BB_9C_DD_AA_9F_CC_DD')
  -- 返回:7
select charindex('%[0-9][A-Z]%','AA_BB_9C_DD_AA_9F_CC_DD')
  -- 返回:0
  看出来没有?patindex 函数可以使用通配符,而charindex 函数不能。也就是说:patindex 函数功能更强大!



4,  newid( )
  -- 创建 uniqueidentifier 类型的唯一值。
  这个函数总是能返回一个新的GUID号码,它永远不会重复,而且毫无规律。
  示例: 
declare @myid uniqueidentifier
  set @myid = newid() 
  print '@myid 的值是: '+ convert(varchar(255), @myid)
  -- @myid 的值是: 0B939411-4827-485E-884B-5BEB1699CFEE



5,  collate
  -- 一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则转换。
  collate 子句只能应用于 char、varchar、text、nchar、nvarchar 和 ntext 数据类型。
  示例:
drop table #tempTalbe
  go
  create table #tempTalbe
  (
  _id int,
  _name varchar(30)
  )
  go
  insert into #tempTalbe values(1,'中');
  insert into #tempTalbe values(2,'国');
  insert into #tempTalbe values(3,'人');
  select * from #tempTalbe
  order by _name
  collate latin1_general_cs_as_ks_ws asc;
  go 
  /* 显示结果:
  _id _name
  ----------- ------------------------------
  1 中
  2 国
  3 人
  */
  select * from #tempTalbe
  order by _name
  collate Chinese_PRC_CS_AS_KS_WS asc;
  go
  /* 显示结果:
  _id _name
  ----------- ------------------------------
  2 国
  3 人
  1 中
  */
  注意:
  可以执行系统函数 fn_helpcollations 来检索 Windows 排序规则和 SQL Server 排序规则的所有有效排序规则名称的列表:
  select * from fn_helpcollations()


6,  sp_executesql 存储过程
  建议您在执行字符串时,使用 sp_executesql 存储过程而不要使用 execute 语句。
  由于此存储过程支持参数替换,因此 sp_executesql 比 execute 的功能更多;
  由于 sqlserver 更可能重用 sp_executesql 生成的执行计划,因此 sp_executesql比execute更有效。
  示例:  
create table #tb_suer( id int)
  go
  insert into #tb_suer values(1234)
  go
  declare @tbname nvarchar(20)
  declare @sql nvarchar(500)
  set @tbname='#tb_suer'
  set @sql='select * from ' + @tbname
  execute sp_executesql @sql 
  /* 结果:
  id
  -----------
  1234
  */



7,  checksum
  -- 返回按照表的某一行或一组表达式计算出来的校验和值。 checksum 用于生成哈希索引。
  checksum ( * | expression [ ,...n ] )
  * 指定对表的所有列进行计算。如果有任一列是非可比数据类型,则 checksum 返回错误。
  非可比数据类型有 text、ntext、image、xml 和 cursor,还包括以上述任一类型作为基类型的 sql_variant。
  expression 除非可比数据类型之外的任何类型的表达式。
  示例:
  -- 找出在T1有,T表没有的记录。
select * from t1 where checksum(*) not in ( select checksum(*) from t ) 
  上面示例,等于是把t1表里的一行数据hash和t表一行数据hash后相比,就是说两个表里有没有行完全相当的。

分享到:
评论
1 楼 自己811005 2018-01-14  
3e0cb37da14117f477ff4f2f94c729eb

相关推荐

    net学习笔记及其他代码应用

    1. 简述 private、 protected...因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可...

    精髓Oralcle讲课笔记

    --(函数to_number()求出这种薪水里带有特殊符号的) 44、select ename, sal*12 + nvl(comm,0) from emp; --(函数nvl() 求出员工的"年薪 + 提成(或奖金)问题") 45、select max(sal) from emp; -- (函数max() 求出...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    5.5 PL/SQL中的异常处理 5.6 程序中的控制结构 5.6.1 程序控制 5.6.2 IF逻辑结构 5.6.3 CASE语句 5.6.4 Loop循环 5.6.5 WHILE循环 5.6.6 FOR循环 5.7 如何创建存储过程以及创建存储过程的原因 5.8 函数的创建和使用...

    Oracle Database 11g初学者指南--详细书签版

    5.5 PL/SQL中的异常处理 134 5.6 程序中的控制结构 138 5.6.1 程序控制 138 5.6.2 IF逻辑结构 139 5.6.3 CASE语句 141 5.6.4 Loop循环 142 5.6.5 WHILE循环 143 5.6.6 FOR循环 143 5.7 如何创建存储过程...

    delphi 开发经验技巧宝典源码

    0128 使用ExceptAddr函数获得异常被抛出的地址 83 0129 格式化异常处理信息 84 4.8 图形图像相关函数 85 0130 将TColor类型的颜色值转换为RGB值 85 0131 使用Bounds函数获得某矩形的TRect 86 0132 从已有...

    delphi 开发经验技巧宝典源码06

    0128 使用ExceptAddr函数获得异常被抛出的地址 83 0129 格式化异常处理信息 84 4.8 图形图像相关函数 85 0130 将TColor类型的颜色值转换为RGB值 85 0131 使用Bounds函数获得某矩形的TRect 86 0132 从已有...

    javaSE代码实例

    17.3.4 ReentrantReadWriteLock读/写锁的具体使用 391 17.4 信号量的使用 393 17.4.1 Semaphore类简介 393 17.4.2 Semaphore类的具体使用 394 17.5 队列 396 17.5.1 Queue接口介绍 396 17.5.2 ...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    超级有影响力霸气的Java面试题大全文档

    例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望...

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    2.3.5 异常处理 ................................ 26 2.4 通用类型系统和公共语言 规范 ............................................ 26 2.5 小结 ............................................ 27 第...

Global site tag (gtag.js) - Google Analytics