151.数据存储为xml

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_savexml]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_savexml]
GO

/*--将表中的数据存储为xml文档
/*--调用示例

	exec p_savexml 'sysobjects'
--*/
go
create proc p_savexml
@tbname sysname
as
declare @s nvarchar(4000)
select @s='',@tbname=quotename(@tbname)
select @s=@s+N'
'+quotename(name,'<>')
	+N'''+rtrim(cast('+quotename(name)+' as varchar(8000)))+'''
	+quotename('/'+name,'<>')
from syscolumns 
where id=object_id(@tbname)
order by colid
print @s
exec(N'
select id=identity(int,1,1),value='''+@s+'''
into ##t from '+@tbname)
set @s=@@rowcount
set identity_insert ##t on
insert ##t(id,value)
--select -3,N'' union all
select -2,N'' union all
select -1,N'' union all
select  0,N''+@s+'' union all
select @s+1,N'' union all
select @s+2,N''
set @s='bcp "select case when id between 1 and '
	+@s
	+' then N''''+value+N'''' else value end from ##t order by id'
	+'" queryout "c:\a.xml" /T /c'
select * from ##t
exec master..xp_cmdshell @s
drop table ##t
go

猜你喜欢

转载自blog.csdn.net/huang714/article/details/88654204