Sql server 2008 字符串连接的简化语句
我需要连接以下xml中的一些属性:Sql server 2008 字符串连接的简化语句,sql-server-2008,tsql,Sql Server 2008,Tsql,我需要连接以下xml中的一些属性: set @data = N'<properties> <property> <name>first</name> </property> <property> <name
set @data = N'<properties>
<property>
<name>first</name>
</property>
<property>
<name>second</name>
</property>
<property>
<name>third</name>
</property>
</properties>'
如果我要提取的结果是:first=#。first,second=#。second,third=#。third,我的解决方案如下所示:
declare mycursor cursor fast_forward
for select
x.value(N'(name)[1]', N'nvarchar(50)')
from
@data.nodes(N'/properties/property') AS xtbl(x)
declare @name nvarchar(50), @result nvarchar(max) = N'$name$=#.$name2$'
open mycursor
fetch next from mycursor into @name
while @@fetch_status = 0
begin
set @result= replace(@result, N'$name$', @name)
set @result = replace(@result, N'$name2$', @name + N',$name$=#.$name2$')
fetch next from mycursor into @name
end
close mycursor;
deallocate mycursor;
set @result = replace(@result, N',$name$=#.$name2$', '')
如何在不使用任何循环的情况下执行此操作?您可以使用:
declare @result nvarchar(max)=''
select @result = @result + x.value(N'(name)[1]', N'nvarchar(50)')
+ '=#.'
+ x.value(N'(name)[1]', N'nvarchar(50)')
+ ','
from @data.nodes(N'/properties/property') as xtbl(X)
select @result = left(@result, LEN(@result)-1)
print @result
您可以使用:
declare @result nvarchar(max)=''
select @result = @result + x.value(N'(name)[1]', N'nvarchar(50)')
+ '=#.'
+ x.value(N'(name)[1]', N'nvarchar(50)')
+ ','
from @data.nodes(N'/properties/property') as xtbl(X)
select @result = left(@result, LEN(@result)-1)
print @result