您的位置:首页 > 数据库

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的表名, $符合不能去掉哦,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: