SQL数据库表 与excel 数据导入导出
2011-04-01 14:23
225 查看
1:用select语句将数据库数据导出到excel,可以灵活的用sql语句设计你想要的结果集
View Code
declare
@server sysname,
@uname sysname,
@pwd sysname,
@QueryText varchar(200),
@filename varchar(200) ,
@hr int,
@SQlServer int ,
@result_str varchar(255),
@QueryResults int,
@CurrentResultSet int,
@object int,
@WorkBooks int,
@WorkBook int,
@Range int ,
@Columns int,
@Rows int,
@indColumn int,
@indRow int,
@off_Column int,
@off_Row int,
@code_str varchar(100)
set @server='cnby\sql2000'
set @uname='sa'
set @pwd='****'
set @QueryText='SELECT * FROM pubs..authors'
set @filename ='f:\ImportToExcel.xls'
-- set the server to the local server
if @server is null set @server=@@servername
--set the username to the current user name
if @uname is null set @uname=system_user
set nocount on
exec @hr=sp_oacreate 'SQLDMO.SQLServer',@SQLServer out
if @hr<>0
begin
print 'error create SQLDMO.sqlserver'
return
end
-- connect to the SQL Server
if @pwd is null
begin
exec @hr=sp_oamethod @sqlserver,'Connect',null,@server,@uname
return
end
else
begin
exec @hr=sp_oamethod @sqlserver,'Connect',null,@server,@uname,@pwd
if @hr<>0
begin
print 'error connect'
return
end
end
--set queryText
SELECT @result_str = 'ExecuteWithResults("' + @QueryText + '")'
exec @hr=sp_OAMethod @SQLServer,@result_str,@QueryResults out
--参数说明:ole令牌,函数名,输出值
if @hr<>0
begin
print 'error with method executeWithResults'
return
end
exec @hr=sp_oamethod @queryResults,'CurrentResultSet',@CurrentResultSet out
if @hr<>0
BEGIN
PRINT 'error get CurrentResultSet'
RETURN
END
EXEC @hr = sp_OAMethod @QueryResults, 'Columns', @Columns OUT
IF @hr <> 0
BEGIN
PRINT 'error get Columns'
RETURN
END
print '@Columns'+str(@Columns) --9
EXEC @hr = sp_OAMethod @QueryResults, 'Rows', @Rows OUT
IF @hr <> 0
BEGIN
PRINT 'error get Rows'
RETURN
END
print '@rows'+str(@rows) --23
EXEC @hr = sp_OACreate 'Excel.Application', @object OUT
IF @hr <> 0
BEGIN
PRINT 'error create Excel.Application'
RETURN
END
EXEC @hr = sp_OAGetProperty @object, 'WorkBooks', @WorkBooks OUT
IF @hr <> 0
BEGIN
PRINT 'error create WorkBooks'-- 83820286
RETURN
END
EXEC @hr = sp_OAGetProperty @WorkBooks, 'Add', @WorkBook OUT
IF @hr <> 0
BEGIN
PRINT 'error with method Add'
RETURN
END
print '@WorkBook'+str(@WorkBook)
EXEC @hr = sp_OAGetProperty @object, 'Range("A1")', @Range OUT
IF @hr <> 0
BEGIN
PRINT 'error create Range'
RETURN
END
SELECT @indRow = 1
SELECT @off_Row = 0
SELECT @off_Column = 1
WHILE (@indRow <= @Rows)
BEGIN
SELECT @indColumn = 1
WHILE (@indColumn <= @Columns) --循环列
BEGIN
EXEC @hr = sp_OAMethod @QueryResults, 'GetColumnString', @result_str OUT, @indRow, @indColumn
IF @hr <> 0
BEGIN
PRINT 'error get GetColumnString'
RETURN
END
EXEC @hr = sp_OASetProperty @Range, 'value', @result_str
IF @hr <> 0
BEGIN
PRINT 'error set value'
RETURN
END
EXEC @hr = sp_OAGetProperty @Range, 'Offset', @Range OUT, @off_Row, @off_Column
IF @hr <> 0
BEGIN
PRINT 'error get Offset'
RETURN
END
SELECT @indColumn = @indColumn + 1
END
SELECT @indRow = @indRow + 1
SELECT @code_str = 'Range("A' + LTRIM(str(@indRow)) + '")'
EXEC @hr = sp_OAGetProperty @object, @code_str, @Range OUT
IF @hr <> 0
BEGIN
PRINT 'error create Range'
RETURN
END
END
SELECT @result_str = 'exec master..xp_cmdshell ''del ' + @filename + ''', no_output'
EXEC(@result_str)
SELECT @result_str = 'SaveAs("' + @filename + '")'
EXEC @hr = sp_OAMethod @WorkBook, @result_str
IF @hr <> 0
BEGIN
PRINT 'error with method SaveAs'
RETURN
END
EXEC @hr = sp_OAMethod @WorkBook, 'Close'
IF @hr <> 0
BEGIN
PRINT 'error with method Close'
RETURN
END
EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
PRINT 'error destroy Excel.Application'
RETURN
END
EXEC @hr = sp_OADestroy @SQLServer
IF @hr <> 0
BEGIN
PRINT 'error destroy SQLDMO.SQLServer'
RETURN
END
2:excel 表导入到数据库表中,不能定义表的结构,而且把第一行当做列了,很郁闷
select * into test(你的数据库表名) from openrowset
('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=f:\ImportToExcel.xls', 'select * from [sheet1$]')
[sheet1$],excel的表名, $符合不能去掉哦,
View Code
declare
@server sysname,
@uname sysname,
@pwd sysname,
@QueryText varchar(200),
@filename varchar(200) ,
@hr int,
@SQlServer int ,
@result_str varchar(255),
@QueryResults int,
@CurrentResultSet int,
@object int,
@WorkBooks int,
@WorkBook int,
@Range int ,
@Columns int,
@Rows int,
@indColumn int,
@indRow int,
@off_Column int,
@off_Row int,
@code_str varchar(100)
set @server='cnby\sql2000'
set @uname='sa'
set @pwd='****'
set @QueryText='SELECT * FROM pubs..authors'
set @filename ='f:\ImportToExcel.xls'
-- set the server to the local server
if @server is null set @server=@@servername
--set the username to the current user name
if @uname is null set @uname=system_user
set nocount on
exec @hr=sp_oacreate 'SQLDMO.SQLServer',@SQLServer out
if @hr<>0
begin
print 'error create SQLDMO.sqlserver'
return
end
-- connect to the SQL Server
if @pwd is null
begin
exec @hr=sp_oamethod @sqlserver,'Connect',null,@server,@uname
return
end
else
begin
exec @hr=sp_oamethod @sqlserver,'Connect',null,@server,@uname,@pwd
if @hr<>0
begin
print 'error connect'
return
end
end
--set queryText
SELECT @result_str = 'ExecuteWithResults("' + @QueryText + '")'
exec @hr=sp_OAMethod @SQLServer,@result_str,@QueryResults out
--参数说明:ole令牌,函数名,输出值
if @hr<>0
begin
print 'error with method executeWithResults'
return
end
exec @hr=sp_oamethod @queryResults,'CurrentResultSet',@CurrentResultSet out
if @hr<>0
BEGIN
PRINT 'error get CurrentResultSet'
RETURN
END
EXEC @hr = sp_OAMethod @QueryResults, 'Columns', @Columns OUT
IF @hr <> 0
BEGIN
PRINT 'error get Columns'
RETURN
END
print '@Columns'+str(@Columns) --9
EXEC @hr = sp_OAMethod @QueryResults, 'Rows', @Rows OUT
IF @hr <> 0
BEGIN
PRINT 'error get Rows'
RETURN
END
print '@rows'+str(@rows) --23
EXEC @hr = sp_OACreate 'Excel.Application', @object OUT
IF @hr <> 0
BEGIN
PRINT 'error create Excel.Application'
RETURN
END
EXEC @hr = sp_OAGetProperty @object, 'WorkBooks', @WorkBooks OUT
IF @hr <> 0
BEGIN
PRINT 'error create WorkBooks'-- 83820286
RETURN
END
EXEC @hr = sp_OAGetProperty @WorkBooks, 'Add', @WorkBook OUT
IF @hr <> 0
BEGIN
PRINT 'error with method Add'
RETURN
END
print '@WorkBook'+str(@WorkBook)
EXEC @hr = sp_OAGetProperty @object, 'Range("A1")', @Range OUT
IF @hr <> 0
BEGIN
PRINT 'error create Range'
RETURN
END
SELECT @indRow = 1
SELECT @off_Row = 0
SELECT @off_Column = 1
WHILE (@indRow <= @Rows)
BEGIN
SELECT @indColumn = 1
WHILE (@indColumn <= @Columns) --循环列
BEGIN
EXEC @hr = sp_OAMethod @QueryResults, 'GetColumnString', @result_str OUT, @indRow, @indColumn
IF @hr <> 0
BEGIN
PRINT 'error get GetColumnString'
RETURN
END
EXEC @hr = sp_OASetProperty @Range, 'value', @result_str
IF @hr <> 0
BEGIN
PRINT 'error set value'
RETURN
END
EXEC @hr = sp_OAGetProperty @Range, 'Offset', @Range OUT, @off_Row, @off_Column
IF @hr <> 0
BEGIN
PRINT 'error get Offset'
RETURN
END
SELECT @indColumn = @indColumn + 1
END
SELECT @indRow = @indRow + 1
SELECT @code_str = 'Range("A' + LTRIM(str(@indRow)) + '")'
EXEC @hr = sp_OAGetProperty @object, @code_str, @Range OUT
IF @hr <> 0
BEGIN
PRINT 'error create Range'
RETURN
END
END
SELECT @result_str = 'exec master..xp_cmdshell ''del ' + @filename + ''', no_output'
EXEC(@result_str)
SELECT @result_str = 'SaveAs("' + @filename + '")'
EXEC @hr = sp_OAMethod @WorkBook, @result_str
IF @hr <> 0
BEGIN
PRINT 'error with method SaveAs'
RETURN
END
EXEC @hr = sp_OAMethod @WorkBook, 'Close'
IF @hr <> 0
BEGIN
PRINT 'error with method Close'
RETURN
END
EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
PRINT 'error destroy Excel.Application'
RETURN
END
EXEC @hr = sp_OADestroy @SQLServer
IF @hr <> 0
BEGIN
PRINT 'error destroy SQLDMO.SQLServer'
RETURN
END
2:excel 表导入到数据库表中,不能定义表的结构,而且把第一行当做列了,很郁闷
select * into test(你的数据库表名) from openrowset
('Microsoft.Jet.OLEDB.4.0','Excel 8.0;Database=f:\ImportToExcel.xls', 'select * from [sheet1$]')
[sheet1$],excel的表名, $符合不能去掉哦,
相关文章推荐
- 将excel文件中的数据导入导出至SQL数据库中(Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0|office2003和office2007)
- C# 连接sql数据库对 access,excel导入导出操作 一、SQL SERVER 和ACCESS的数据导入导出
- 将excel文件中的数据导入导出至SQL数据库中
- 将excel中数据导入到sql数据库,,从数据库导出到excel中
- 将excel文件中的数据导入导出至SQL数据库中(重要).docx
- 将excel文件中的数据导入导出至SQL数据库
- 将excel文件中的数据导入导出至SQL数据库中(重要)
- 将excel文件中的数据导入导出至SQL数据库中(Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0|office2003和office2007)
- 将excel文件中的数据导入导出至SQL数据库中
- 将excel文件中的数据导入导出至SQL数据库中(Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0|office2003和office2007)
- .NET使用NPOI将数据导出/导入到Excel文件介绍
- 精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
- 关于利用heidiSQL或者sqlYog导入导出数据库和数据的问题(导出为excel再导入)
- 利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
- 使用PHPExcel实现对excel数据的导入和导出
- 定时从多个Excel导入数据到SQL数据库
- SQL SERVER 和EXCEL的数据导入导出
- 导入导出EXCEL数据时有关时间的处理
- SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
- C#实现EXCEL数据的导入导出