注册 | 登录 | 设为首页 | 加入收藏
您当前的位置:飞翔学院-IT中国 → 编程开发网页制作html → 文章内容

将指定的表/视图中的数据导出为 html 文件

作者:佚名 来源:本站整理 发布时间:2008-11-10 20:38:36
IFOBJECT_ID(N'dbo.p_ExportHtml')ISNOTNULL
    DROPPROCdbo.p_ExportHtml;
GO
 
/*-- == 导出表/视图中的数据为html 文件======================
 
此存储过程用于将指定的表/视图中的数据导出为 html 文件
由于是使用存储过程, 因此文件目录基于 sql server 服务器
 
存储过程中会使用xp_cmdshell 调用bcp 来写文件
因此必须打开xp_cmdshell 功能, 可以使用下面的脚本实现
EXEC sp_configure N'show advanced options', 1 RECONFIGURE;
EXEC sp_configure N'xp_cmdshell', 1 RECONFIGURE;
 
---------------------------------------------------------
-- 调用示例
EXEC dbo.p_ExportHtml
    @object_name = N'sys.objects',
    @file_name = N'c:\test.html';
 
---------------------------------------------------------
-- 环境要求
适用于sql server 2005 或者更高的版本
 
-- ==== 邹建2008.11(引用请保留此信息) =============== */
CREATEPROCdbo.p_ExportHtml
    @object_namesysname,
    @file_namenvarchar(260),
    @titlenvarchar(1000)=NULL-- html 标题, 为NULL时使用@object_name
AS
SETNOCOUNTON;
 
DECLARE
    @sql_fieldnvarchar(max),
    @sql_bodynvarchar(max);
SELECT
    @sql_field=N'',
    @sql_body=N''
SELECT
    @sql_field=@sql_field
           +N' UNION ALL SELECT field_name = N'+QUOTENAME(C.name,N''''),
    @sql_body=@sql_body
           +N', [td/@align] = '
              +QUOTENAME(
                     CASE
                         WHENT.nameLIKEN'%int'
                                ORT.nameLIKEN'%money'
                                ORT.nameIN(N'real',N'float',N'decimal',N'numeric')
                            THEN'right'
                         WHENT.nameIN(N'bit')
                            THEN'center'
                         ELSE'left'
                     END,
                     '''')
           +N', [td] = '
              +CASE
                  WHENT.nameIN(N'xml')
                     THENN'CONVERT(nvarchar(max), '+QUOTENAME(C.name)+N')'
                  ELSEQUOTENAME(C.name)
              END
           +N', NULL'
FROMsys.all_columnsC
    INNERJOINsys.typesT
       ONT.system_type_id=C.system_type_id
           ANDT.system_type_id=T.user_type_id
WHERE  C.object_id=OBJECT_ID(@object_name)
ORDERBYC.column_id;
 
IF@@ROWCOUNT= 0
BEGIN
    RAISERROR(N'can''t found object "%s"', 16, 1,@object_name);
    RETURN-1;
END
 
DECLARE
    @temp_proce_namesysname,
    @sqlnvarchar(max),
    @cmdnvarchar(4000);
 
SELECT
    @temp_proce_name=QUOTENAME(N'##_'
                                +CONVERT(char(10),GETDATE(), 112)
                                +N'_'+CONVERT(char(36),NEWID())
                                ), 
    @sql=N'
CREATE PROC '+@temp_proce_name+N'
AS
WITH
FIELD AS(
    '+STUFF(@sql_field, 1, 11,N'')+N'
),
DATA AS(
    SELECT * FROM '+@object_name+N'
)
SELECT
    [H1] = N'''+REPLACE(ISNULL(@title,@object_name),N'''',N'''''')+N''',
    [table/@border] = 1,
    [tr] = (
           SELECT
             
  • = field_name
  •            FROM FIELD
               FOR XML PATH(''th''), TYPE
               ),
       
  • = (
  •            SELECT '+STUFF(@sql_body, 1, 2,N'')+N'
               FROM DATA
               FOR XML PATH(''tr''), TYPE
           )
    FOR XML PATH(''html''), TYPE;
    ';
     
    -- 生成临时处理存储过程
    EXECsp_executesql
        @sql;
     
    -- 输出结果到文件
    SET@cmd=N'bcp "EXEC '+QUOTENAME(DB_NAME())
           +N'.'+  @temp_proce_name
           +N'" queryout '+QUOTENAME(@file_name,N'"')
           +N' /T /w';
     
        colnvarchar(4000)
    );
    INSERT@tb_re
    EXECsys.xp_cmdshell @cmd;
    DECLARE
        @file_existint;
    EXECmaster.sys.xp_fileexist @file_name,@file_existOUTPUT;
     
    -- 删除临时存储过程
    IFOBJECT_ID(@temp_proce_name)ISNOTNULL
        EXEC(N'DROP PROC '+@temp_proce_name+N';');
     
    -- 检查文件生成是否成功
    IF@file_exist= 1
    BEGIN
        RAISERROR(N'object "%s" output to "%s" succeed.', 10, 1,@object_name,@file_name);
    END
    ELSE
    BEGIN
        SELECT*FROM@tb_re;
        RAISERROR(N'some error occur when generate html file, please check output information', 16, 1);
        RETURN-1;
    END
    GO
    DECLARE@tb_reTABLE(

    • 打印文档
    • 推荐好友
    • 返回顶部
    • 增大字体
    • 减少字体
    关于本站 | 工作机会 | 合作网站 | 广告服务 | 市场合作| 联系我们 | 抽奖活动
    版权所有: 武汉威俊科技有限公司 Copyright 2005-2007 www.ITCNW.COM All rights reserved