SQL SERVER 和EXCEL的数据导入导出
1、在SQL SERVER里查询Excel数据:
-- ======================================================
SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
SELECT * 
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------------------------------------------------------------------2、将Excel的数据导入SQL server :
-- ======================================================
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
实例:
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
  'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
-------------------------------------------------------------------------------------------------3、将SQL SERVER中查询到的数据导成一个Excel文件
-- ======================================================
T-SQL代码:
EXEC master..xp_cmdshell 'bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
参数:S 是SQL服务器名;U是用户;P是密码
说明:还可以导出文本文件等多种格式
实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中应用ADO导出EXCEL文件代码: 
Dim cn  As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"
------------------------------------------------------------------------------------------------4、在SQL SERVER里往Excel插入数据:
-- ======================================================
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)T-SQL代码:
INSERT INTO  
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',  
'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]  
(bestand, produkt) VALUES (20, 'Test')  

解决方案 »

  1.   

    create table aa(....)
    create table bb(....)
    create table cc(....)
    --用游标
    declare @str varchar(100) 
    --定义游标
    declare DZCursor CURSOR for SELECT name FROM a 
    --打开游标
    open  DZCursor 
    --从游标取记录
    fetch next from DZCursor into @str 
    --当有记录
    while @@fetch_status=0 
    begin 
    --这里写上从EXCEL导入SQL的语句*********************************
    --取下一条记录
    fetch next from DZCursor into @str 
    end 
    --关闭游标
    close DZCursor 
    --删除游标引用
    deallocate DZCursor 
      

  2.   

    谢谢,这个别人发过,可我用的是任意导入,这么写有什么问题?
    -----------------------
    SELECT * into newtable
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
    实例:
    SELECT * into newtable
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions---------------------
    newtable,datasource我想任意定义,该怎么写?
      

  3.   

    那要用动态SQL.
    ------------------------------------------------------------------------------------------
    --******************          动态sql语句基本语法           ******************************
    ------------------------------------------------------------------------------------------
    1 :普通SQL语句可以用exec执行 Select * from tableName 
    exec('select * from tableName') 
    exec sp_executesql N'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    exec('select ' + @fname + ' from tableName') -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    exec(@s) -- 成功 
    exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    exec(@s) -- 成功 
    exec sp_executesql @s -- 此句正确 3. 输出参数 
    declare @num int, @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  4.   

    sdhdy 说 的很清楚,
    begin 
    --这里写上从EXCEL导入SQL的语句*********************************
    --取下一条记录
    fetch next from DZCursor into @str 
    end 这里写上从EXCEL导入SQL的语句:
    SELECT * into newtable 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
      'Data Source=这个地方怎么任意定义xls文件名呢?'';User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 
      

  5.   

    用游标直接写?
    create table aa(....)
    create table bb(....)
    create table cc(....)
    --用游标
    declare @str varchar(100) 
    --定义游标
    declare DZCursor CURSOR for SELECT name FROM a 
    --打开游标
    open  DZCursor 
    --从游标取记录
    fetch next from DZCursor into @str 
    --当有记录
    while @@fetch_status=0 
    begin 
    --这里写上从EXCEL导入SQL的语句*********************************
    insert into 表 select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=d:\t\'name',sheet1$)
    --取下一条记录
    fetch next from DZCursor into @str 
    end 
    --关闭游标
    close DZCursor 
    --删除游标引用
    deallocate DZCursor 怎么写啊?
      

  6.   

    declare @ExcelName nvarchar(20),@SQL nvarchar(max)
    set @ExcelName='aa.xls'set @SQL='
    SELECT * into '+left(@ExcelName,charindex('.',@ExcelName)-1)+'
    FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',
      ''Data Source="d:\t\'+@ExcelName+'";User ID=Admin;Password=;Extended properties=Excel 5.0'')...[Sheet1$]'exec(@SQL)
      

  7.   


    declare @ExcelName nvarchar(20),@SQL nvarchar(max)
    set @ExcelName='aa.xls'--这个地方能不能不固定?依次取aa.xls,bb.xls,cc.xls行不行?set @SQL='
    SELECT * into '+left(@ExcelName,charindex('.',@ExcelName)-1)+'
    FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',
      ''Data Source="d:\t\'+@ExcelName+'";User ID=Admin;Password=;Extended properties=Excel 5.0'')...[Sheet1$]'exec(@SQL)
      

  8.   

    可以,放在我游标要写的SQL语句那里,然后执行动态语句。
      

  9.   

    set @ExcelName=@str--这个地方能不能不固定?依次取aa.xls,bb.xls,cc.xls行不行?set @SQL='
    SELECT * into '+left(@ExcelName,charindex('.',@ExcelName)-1)+'
    FROM OpenDataSource( ''Microsoft.Jet.OLEDB.4.0'',
      ''Data Source="d:\t\'+@ExcelName+'";User ID=Admin;Password=;Extended properties=Excel 5.0'')...[Sheet1$]'exec(@SQL)
      

  10.   

    谢谢,可以结贴了,最后一个小问题,看有没有办法,有没有答案都可:
    保存完毕后相应的将这a表里存的.xls在d:\t里删除掉?
      

  11.   

    楼主参考一下:xp_cmdshell的用法吧,应该可以的。