求一SQL函数,根据参数,返回xml结构

juntor 2007-07-03 10:19:40
表名:test
code [name]
-----------------------------
001 AAA
002 BBB
003 CCC

假设函数名为:fn_return_xml
执行:select dbo.fn_return_xml('001')
希望返回:
<s>
<c='001' n='AAA' />
</s>

执行:select dbo.fn_return_xml('001,002')
希望返回:
<s>
<c='001' n='AAA' />
<c='002' n='BBB' />
</s>

我写了一个,只能处理一个code的(多个code用逗号<,>分隔)
create function fn_return_xml(@str nvarchar(100))
returns nvarchar(2000)
as
begin

declare @ret nvarchar(2000)
set @ret = ''
-- set @str = replace(@str,',',''',''')
-- set @str = ''''+@str+''''

select @ret = @ret + '<c=''' + code + ''' n='''+[name]+''' />'
from
test
where code in (@str)

set @ret = '<s>'+@ret+'</s>'
return @ret
end

哪位高人帮我看看.
有的改吗?
或者用新的方法.
思路也行,谢谢!
...全文
233 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
juntor 2007-07-05
  • 打赏
  • 举报
回复
alter function fn_return_xml(@str nvarchar(100))
returns nvarchar(2000)
as
begin
declare @retnvarchar(2000)
set @ret = ''

select @ret = @ret + '<v c=''' + code + ''' n='''+[name]+''' />'
from test
where charindex(','+rtrim(code)+',',','+@str+',')>0

set @ret = '<s>'+@ret+'</s>'
return @ret
end

谢谢 hellowork(一两清风) ( )
=================================================
declare @t table(SHIP_ID int,name varchar(10))
insert @t
select 1,'a' union all
select 2,'b' union all
select 3,'c' union all
select 4,'d' union all
select 5,'e'

declare @SHIP_ID_LIST varchar(50)
set @SHIP_ID_LIST = '1,3,5'
select * from @t where
charindex(',' + rtrim(SHIP_ID) + ',',',' + @SHIP_ID_LIST + ',') > 0

/*结果
SHIP_ID name
----------- ----------
1 a
3 c
5 e
*/
juntor 2007-07-03
  • 打赏
  • 举报
回复
xml结构写错了.
第二个节点,应该加个v
<s>
<v c='001' n='AAA' />
</s>
===================================
谢谢zhenmeiyisi(。。。)
我要可以传入参数,
来限定返回的内容.
zhenmeiyisi 2007-07-03
  • 打赏
  • 举报
回复
select * from test for xml auto

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧