在SQL Server 的使用过程中,发现几个很有用,但不太常用(或细节不太清楚)的函数(存储过程):
遂记下,以备日后查询。不敢独享,与君共之。有用且看,无用略过。
1> isnumeric( expression )
数值类型包括(int、bigint、smallint、tinyint、numeric、money、smallmoney、float、decimal、real)
示例:
where isnumeric(columnname) <> 1;
go
2> isdate( expression )
print ' 有效的日期 '
else
print ' 无效的日期 '
3> patindex( '%pattern%' , expression )
-- 如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。
-- 返回:4
上面示例返回的是第一个‘BB’的开始位置。
其实,使用 charindex 函数也能实现上面示例的查询,如下:
-- 返回:4
-- 返回:7
select charindex( ' %[0-9][A-Z]% ', ' AA_BB_9C_DD_AA_9F_CC_DD ')
-- 返回:0
看出来没有?patindex 函数可以使用通配符,而charindex 函数不能。也就是说:patindex 函数功能更强大!
4> newid( )
set @myid = newid()
print ' @myid 的值是: ' + convert( varchar( 255), @myid)
-- @myid 的值是: 0B939411-4827-485E-884B-5BEB1699CFEE
5> collate
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 排序规则的所有有效排序规则名称的列表:
由于此存储过程支持参数替换,因此 sp_executesql 比 execute 的功能更多;
由于 sql server 更可能重用 sp_executesql 生成的执行计划,因此 sp_executesql 比 execute 更有效。
示例: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
*/
上面示例演示了SQL语句的拼接。
* 指定对表的所有列进行计算。如果有任一列是非可比数据类型,则 checksum 返回错误。
非可比数据类型有 text、ntext、image、xml 和 cursor,还包括以上述任一类型作为基类型的 sql_variant。
expression 除非可比数据类型之外的任何类型的表达式。
select * from t1 where checksum( *) not in ( select checksum( *) from t )
上面示例,等于是把t1表里的一行数据hash和t表一行数据hash后相比,就是说两个表里有没有行完全相当的。
本文转自钢钢博客园博客,原文链接http://www.cnblogs.com/xugang/archive/2011/10/18/2216582.html,如需转载请自行联系原作者