1:用select语句将数据库数据导出到excel,可以灵活的用sql语句设计你想要的结果集
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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
@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的表名, $符合不能去掉哦,