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

IF OBJECT_ID(N'dbo.p_ExportHtml') IS NOT NULL<!----><o:p></o:p>

    DROP PROC dbo.p_ExportHtml;<o:p></o:p>

GO<o:p></o:p>

<o:p> </o:p>

/*-- == 导出表/视图中的数据为html 文件======================<o:p></o:p>

<o:p> </o:p>

此存储过程用于将指定的表/视图中的数据导出为 html 文件

由于是使用存储过程, 因此文件目录基于 sql server 服务器

<o:p> </o:p>

存储过程中会使用xp_cmdshell 调用bcp 来写文件<o:p></o:p>

因此必须打开xp_cmdshell 功能, 可以使用下面的脚本实现<o:p></o:p>

EXEC sp_configure N'show advanced options', 1 RECONFIGURE;<o:p></o:p>

EXEC sp_configure N'xp_cmdshell', 1 RECONFIGURE;<o:p></o:p>

<o:p> </o:p>

---------------------------------------------------------<o:p></o:p>

-- 调用示例<o:p></o:p>

EXEC dbo.p_ExportHtml<o:p></o:p>

    @object_name = N'sys.objects',<o:p></o:p>

    @file_name = N'c:\test.html';<o:p></o:p>

<o:p> </o:p>

---------------------------------------------------------<o:p></o:p>

-- 环境要求<o:p></o:p>

适用于sql server 2005 或者更高的版本<o:p></o:p>

<o:p> </o:p>

-- ==== 邹建2008.11(引用请保留此信息) =============== */<o:p></o:p>

CREATE PROC dbo.p_ExportHtml<o:p></o:p>

    @object_name sysname,<o:p></o:p>

    @file_name nvarchar(260),<o:p></o:p>

    @title nvarchar(1000) = NULL -- html 标题, NULL时使用@object_name<o:p></o:p>

AS<o:p></o:p>

SET NOCOUNT ON;<o:p></o:p>

<o:p> </o:p>

DECLARE<o:p></o:p>

    @sql_field nvarchar(max),<o:p></o:p>

    @sql_body nvarchar(max);<o:p></o:p>

SELECT<o:p></o:p>

    @sql_field = N'',<o:p></o:p>

    @sql_body = N''<o:p></o:p>

SELECT<o:p></o:p>

    @sql_field = @sql_field<o:p></o:p>

           + N' UNION ALL SELECT field_name = N' + QUOTENAME(C.name, N''''),<o:p></o:p>

    @sql_body = @sql_body<o:p></o:p>

           + N', [td/@align] = '<o:p></o:p>

              + QUOTENAME(<o:p></o:p>

                     CASE<o:p></o:p>

                         WHEN T.name LIKE N'%int'<o:p></o:p>

                                OR T.name LIKE N'%money'<o:p></o:p>

                                OR T.name IN(N'real', N'float', N'decimal', N'numeric')<o:p></o:p>

                            THEN 'right'<o:p></o:p>

                         WHEN T.name IN(N'bit')<o:p></o:p>

                            THEN 'center'<o:p></o:p>

                         ELSE 'left'<o:p></o:p>

                     END,<o:p></o:p>

                     '''')<o:p></o:p>

           + N', [td] = '<o:p></o:p>

              + CASE<o:p></o:p>

                  WHEN T.name IN(N'xml')<o:p></o:p>

                     THEN N'CONVERT(nvarchar(max), ' + QUOTENAME(C.name) + N')'<o:p></o:p>

                  ELSE QUOTENAME(C.name)<o:p></o:p>

              END<o:p></o:p>

           + N', NULL'<o:p></o:p>

FROM sys.all_columns C<o:p></o:p>

    INNER JOIN sys.types T<o:p></o:p>

       ON T.system_type_id = C.system_type_id<o:p></o:p>

           AND </fon>

你可能感兴趣的:(html,sql,c,SQL Server,XP)