浅析SQLServer中的Scanf与Printf


SQLServer中有两个扩展存储过程实现Scanf和Printf功能,恰当的使用它们可以在提取和拼接字符串时大幅度简化SQL代码。

1、xp_sscanf,用它可以分解格式相对固定的字符串,这对于厌倦使用一堆substring和charindex的朋友来说不错。比如前几天的一个帖子中提出的如何分解ip地址,相对简练且通用的代码应该是下面这样

复制代码 代码如下:

if (object_id ('f_getip' ) is not null )
drop function f_getip
go
create function dbo . f_getip (@ ip varchar (100 ))
returns @ t table (a int , b int , c int , d int )
as
begin
    set @ ip = replace (@ ip , '.' , ' ' )
    declare
    @ s1 varchar (3 ) , @ s2 varchar (3 ),
    @ s3 varchar (3 ) , @ s4 varchar (3 )
    exec xp_sscanf @ ip , '%s %s %s %s' , @ s1 output , @ s2 output , @ s3 output , @ s4 output
    insert into @ t select @ s1 , @ s2 , @ s3 , @ s4
    return
end
go
select * from dbo . f_getip ('192.168.0.1' )
go
/*
a           b           c           d
----------- ----------- ----------- -----------
192         168         0           1
*/

2、xp_sprintf,用它可以拼接出一个字符串而不用担心过多的加号很引号难以控制,比如一个动态执行sql语句的存储过程
复制代码 代码如下:

if (object_id ('p_select' ) is not null )
drop proc p_select
go
create proc p_select (@ tb varchar (100 ), @ cols varchar (100 ), @ wherecol varchar (100 ), @ value varchar (100 ))
as
begin
    declare @ s varchar (8000 )
    exec xp_sprintf @ s output , 'select %s from %s where %s=''%s''' , @ cols , @ tb , @ wherecol , @ value
    exec (@ s)
end
go
exec p_select 'sysobjects' , 'id,xtype,crdate' , 'name' , 'p_select'
/*
id          xtype crdate
----------- ----- -----------------------
898102240   P     2009-08-18 03:01:51.153
*/



相关阅读:
详解PHP的Yii框架中日志的相关配置及使用
MySQL数据库远程访问权限如何打开(两种方法)
Android利用ViewPager实现滑动广告板实例源码
浅谈如何实现easyui的datebox格式化
NodeJS中Buffer模块详解
jQuery+HTML5实现图片上传前预览效果
jQuery实现页面内锚点平滑跳转特效的方法总结
Android 几种屏幕间跳转的跳转Intent Bundle
jQuery插件pagewalkthrough实现引导页效果
Android控件系列之ImageView使用方法
win7安装软件出现错误Error 1935该怎么解决?
JQuery实现左右滚动菜单特效
给VM虚拟机中的CentOS Linux系统挂载U盘的方法图文教程
深入讲解C#编程中嵌套类型和匿名类型的定义与使用
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 永安乡-凯北 冯屯-西岗子 邯郸-葫芦岛 内乡-邵武 秀山-涟源 沙园-克山 万州-东乡 涿州东-凯里南 缙云-新余 惠农-丰镇 开封-兴城 松江-吉安 临城-焦作 葫芦岛北-普湾 长庆桥-南京 桃村-汉口 绣峰-碧州 灵宝西-定州东 武夷山北-金山北 弯道-哈尔滨东 大同-汤阴 柳园-两当 襄阳-焦作 定州-沙河市 石人城-海伦 六安-合川 成都南-重庆北 莱阳-华山北 乌海-乌鲁木齐 焦作-定边 天柱山-黄梅 邵武-九江 大庆-滴道 官高-南大庙 新友谊-公主岭 察素齐-廊坊北 太原-济南东 绍兴-安康 西安-青州市 开封北-昆山南 常州北-灵宝西 潍坊-漯河西 桐柏-商洛 深圳西-龙南 将乐-庐山 喇嘛山-富拉尔基 娄底-潮州 郑州东-沈阳北 宜兴-滁州 新晃西-嘉善南 东辛庄-凌海 静海-南平南 中台子-四分地 分宜-北流 芜湖-罗山 赤壁-陆川 庄桥-绍兴东 滕州东-上饶 济南西-巩义南 丰都-泰安 哈密-伊宁 红旗营-泰康 岳阳东-涪陵北 威箐-羊者窝 乐山-成都东 湖口-绍兴 泰山-义县 灵石-广安 霸州西-辽中 东辛庄-大红旗 月山-汝州 王府-齐齐哈尔 花园-衡阳 庄桥-松江南 衡水-玛纳斯 来宾-邵东 二井-新松浦 随州-商南 富源北-仙游 集宁南-亳州 有谁知道德阳到巴中的车站叫什么?
恩施至荆州路程多远车费多少
大连香炉礁到旅顺怎么走
河南省商丘市宁陵县到石桥乡武庄村怎么走
石家庄快202路从栾城到石家庄路线。首班车到达方正小区这一站
从宁波汽车站到慈溪的线路怎么走
徐州凤凰南苑公寓在哪 坐几路车可以到附近 谢谢各位了
柳州什么地方可以兑换到1角、2角、5角、1元的零钱
从靖江骑摩托车到扬州到扬州哪里离汊河最近
急!!从重庆火车北站到重庆火车站的公交
宜昌到武昌2月27号的票从什么时候开始买
上海公交车新川专线往列车站去,几点开大概几点的时候到金
无锡客车站官网能不能订购常州嬉戏谷的门票+来回车票的套票
北京西站有到苏洲的火车列车票吗?
广西柳州哪里有学客车美容
汕头哪家的普洱茶最好…………外面好多劣质。(广告的走开、
玉环到温岭列车火车站怎么走
徒步浙西大峡谷要准备些什么,怎么走路线最好?
到哪耍(在成都哈)??
从太仓到镇江要如何坐车
在广州市坐车到云浮市郁南县最快要多久时间
从武汉到黄冈怎么到最方便快捷
安徽 芜湖 九华山如家,从芜湖火车列车站怎么去。
佛山南海狮山大学城到广州火车列车站的路线
上海汽车总站的汽车票提前几天可以买到 最早几天 是上海
太原到榆林的长途客车是什么时间?具体价位是多少?哪个
秦皇岛至大同(张家口的阳原)的汽车客车还有没有,怎么走最方便
从北京站(或者是北京西站)到哈尔滨站的火车车次
成都有到海口的火车列车票吗中转广州学生票半价吗
义乌到余姚的客车汽车票价多少?

Copyright © 2016 phpStudy |