SQLServer中有两个扩展存储过程实现Scanf和Printf功能恰当的使用它们可以在提取和拼接字符串时大幅度简化SQL代码
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 (
))
returns @ t table (a int
b int
c int
d int )
as
begin
set @ ip = replace (@ ip
)
declare
@ s
varchar (
)
@ s
varchar (
)
@ s
varchar (
)
@ s
varchar (
)
exec xp_sscanf @ ip
%s %s %s %s
@ s
output
@ s
output
@ s
output
@ s
output
insert into @ t select @ s
@ s
@ s
@ s
return
end
go
select * from dbo
f_getip (
)
go
/*
a b c d
*/
xp_sprintf用它可以拼接出一个字符串而不用担心过多的加号很引号难以控制比如一个动态执行sql语句的存储过程
复制代码 代码如下:
if (object_id (
p_select
) is not null )
drop proc p_select
go
create proc p_select (@ tb varchar (
)
@ cols varchar (
)
@ wherecol varchar (
)
@ value varchar (
))
as
begin
declare @ s varchar (
)
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
P
:
:
*/