• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

民工的家

Jackyli.918@hotmail.com
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

将数据库导出到XML文件

用户需求,数据转移与合并。

网上的很多解决方案都是读进内存中再输出,感觉很不爽

本文提供将数据库的表导出到XML文件中的方法,直接用存储过程导出

基本命令:

EXEC xp_cmdshell 'BCP "SELECT * FROM School.dbo.Department FOR XML RAW(''Department''),ELEMENTS XSINIL, ROOT(''Departments'')" QUERYOUT "D:\Backup\Department.xml" -c -S jacky -U sa -P sa'

 

下边是一个自动导出所有表的存储过程封装

Code
CREATE PROC [dbo].[ExportToXml]
@serverName VARCHAR(50),    -- 服务器名或IP
@dbName VARCHAR(50),        -- 数据库名
@uId VARCHAR(50),            -- 登录服务器的用户名
@pwd VARCHAR(50),            -- 登录服务器的密码
@path VARCHAR(200)            -- 要备份的文件路径,必须以'\'结尾
AS
BEGIN
DECLARE @COMMAND NVARCHAR(2000);
SET @COMMAND = N'DECLARE @tableName varchar(255);
                DECLARE @commandString VARCHAR(8000);
                SET @tableName = SUBSTRING(
''?'',8,LEN(''?'')-8);
                SET @commandString =
''BCP "SELECT * FROM '+@dbName+'.? FOR XML RAW(''''''+@tableName+''''''),ELEMENTS XSINIL, ROOT(''''''+@tableName+''s'''')" QUERYOUT "'+@path+'''+@tableName+''.xml" -c -S "'+@serverName+'" -U "'+@uId+'" -P "'+@pwd+'"'';
                EXEC xp_cmdshell @commandString
';
    
EXEC SP_MSFOREACHTABLE 
    
@command1=@COMMAND
    ,
@replacechar=N'?'
END

 

关键点:

1.xp_cmdshell 过程

2.bcp 命令

3.For Xml 选项及参数

    上面的相关技术查看联机丛书吧,基本都有示例

4.SP_MSFOREACHTABLE 这个据说是MS一个未发布的存储过程,从6.0开始支持,网上的说明很多,下面只列出它的7个参数

  @command1 nvarchar(2000),  --第一条运行的T-SQL指令
  @replacechar nchar(1) = N?,   --指定的占位符号 
  @command2 nvarchar(2000) = null,--第二条运行的T-SQL指令
  @command3 nvarchar(2000) = null, --第三条运行的T-SQL指令
  @whereand nvarchar(2000) = null, --可选条件来选择表
  @precommand nvarchar(2000) = null, --在表前执行的指令
  @postcommand nvarchar(2000) = null --在表后执行的指令

 

posted on 2009-10-21 17:18  JackyLi  阅读(1525)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3