浅析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 服务器 CMS SQL jQuery C# C++ java Android IOS oracle MongoDB PostgreSQL SQLite 交通频道 枣庄-乐清 嘉峪关-海南 乳山-上虞 景德镇-伊春 广安-南充 晋江-江都 赤峰-大石桥 驻马店-青岛 湖州-邹平 诸城-潍坊 邹城-庆阳 黄石-宜春 清远-吐鲁番 烟台-武汉 金昌-济源 济南-四会 景德镇-呼伦贝尔 许昌-邹平 江门-大理 包头-上饶 荆州-铁岭 阿勒泰-酒泉 朝阳-牡丹江 阿克苏-启东 南昌-通辽 南阳-三河 信阳-余姚 宜都-三亚 成都-丹阳 林芝-邹城 三河-文山 营口-来宾 保山-张掖 海宁-漳州 咸宁-连云港 百色-潮州 金昌-曲靖 承德-乌鲁木齐 南宁-延安 都江堰-启东 云浮-烟台 毕节-乳山 广州-桐乡 雅安-那曲 铜川-淮安 丹东-聊城 池州-日喀则 汉中-三亚 溧阳-台州 潮州-抚州 商丘-潮州 靖江-信阳 诸暨-石狮 惠州-长乐 金华-渭南 临沂-九江 泰安-海北 宿迁-自贡 六盘水-四会 岳阳-哈尔滨 葫芦岛-蓟县 玉环-郑州 乐清-宁海 江阴-大石桥 曲阜-贺州 漳州-中山 郴州-石狮 抚州-辽阳 莱州-新昌 新余-崇左 溧阳-东台 上虞-新乡 新乡-丹阳 威海-柳州 金华-玉树 宁波-昌都 大石桥-滨州 铁岭-天津 忻州-六盘水 嵊州-南京 隆安东-贵港 漳州-关林 滦县-沧州 尚志-天津 南宁-岳阳东 内江-新余 温都和硕-公主埂 黄家店-纪家沟 铁岭西-北戴河 杨陵南-滕州东 西安北-灵宝西 梨树镇-密山西 玉林-宾阳 新乡-安顺 佳木斯-四平 湘乡-郑州 民权-滕州 武胜-茂名西 荆门-重庆北 赤壁-十堰 铜陵北-厦门北 霸州西-张家界 广州-汨罗 平顶山西-沈阳北 怀化-新沂 蕲春-山海关 普雄-定州 甘旗卡-济南东 邹城-襄阳 烟台南-桃村北 宣化-武威南 彭泽-广州东 贵阳-安庆西 西胡尔清-查干哈达 建阳-肃宁 扎兰屯-朗乡 株洲-庐江 咸阳-江油 福州-静海 青岛北-河源 公主岭-甘泉北 邵武-玉山 文登东-青岛北 沂南-贵阳 大乌苏-开原 涉县-东光 黄平-玉屏 桐子林-喜德 丽水-潼关 哈尔滨-牡丹江 宿松-东海县 枣庄-江山 齐齐哈尔-美溪 苏家屯-下马塘 金山北-福州 天津-马鞍山 扶余-熊岳城 太原南-德州 通远堡-刘家河 长沙-容县 旗下营-红砂坝 侯马西-大荔 歙县北-砀山南 马龙-曲靖 肇东-南岔 高邑西-虎门 齐齐哈尔-扎赉诺尔西 建瓯-安康 襄阳东-广元 香坊-大庆 龙爪沟-祁家堡 包头-青铜峡 祁东-来宾北 玉门-长兴南 向塘-兖州 新余北-高安 秦皇岛-天镇 常德-渑池 南充-株洲 江西村-夏石

Copyright © 2016 phpStudy |