sql基础_Case_特殊函数_异常_脏读
程序员文章站
2022-03-01 22:58:09
...
--脏读 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后相比,就是说两个表里有没有行完全相当的。