WEB开发网
开发学院数据库MSSQL Server MSSQL导出表/视图中的数据为html文件 阅读

MSSQL导出表/视图中的数据为html文件

 2012-10-29 13:43:39 来源:WEB开发网   
核心提示: IF OBJECT_ID(N'dbo.p_ExportHtml') IS NOT NULLDROP PROC dbo.p_ExportHtml;GO/*-- == 导出表/视图中的数据为html 文件==此存储过程用于将指定的表/视图中的数据导出为 html 文件由于是使用存储过程, 因此文件目录基于

 IF OBJECT_ID(N'dbo.p_ExportHtml') IS NOT NULL


DROP PROC dbo.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(引用请保留此信息) =============== */


CREATE PROC dbo.p_ExportHtml


@object_name sysname,


@file_name nvarchar(260),


@title nvarchar(1000) = NULL -- html 标题, 为NULL时使用@object_name


AS


SET NOCOUNT ON;


DECLARE


@sql_field nvarchar(max),


@sql_body nvarchar(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', [[email protected]] = '


+ QUOTENAME(


CASE


WHEN T.name LIKE N'%int'


OR T.name LIKE N'%money'


OR T.name IN(N'real', N'float', N'decimal', N'numeric')


THEN 'right'


WHEN T.name IN(N'bit')


THEN 'center'


ELSE 'left'


END,


'''')


+ N', [td] = '


+ CASE


WHEN T.name IN(N'xml')


THEN N'CONVERT(nvarchar(max), ' + QUOTENAME(C.name) + N')'


ELSE QUOTENAME(C.name)


END


+ N', NULL'


FROM sys.all_columns C


INNER JOIN sys.types T


ON T.system_type_id = C.system_type_id


AND T.system_type_id = T.user_type_id


WHERE C.object_id = OBJECT_ID(@object_name)


ORDER BY C.column_id;


IF @@ROWCOUNT = 0


BEGIN


RAISERROR(N'can''t found object "%s"', 16, 1, @object_name);


RETURN -1;


END


DECLARE


@temp_proce_name sysname,


@sql nvarchar(max),


@cmd nvarchar(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'

1 2  下一页

Tags:MSSQL 导出 视图

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接