学习----实践---学习

学习为了实践而准备,实践总结了我们的不足
只有在学习学习中实践,实践中不断总结、不断学习,这样我们才不会落伍。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Transact-SQL进行数据导入导出方法

Posted on 2007-08-16 10:28  学习----实践---学习  阅读(710)  评论(1编辑  收藏  举报
 

使用Transact-SQL进行在相同和不同是数据库之间的数据导入导出主要用到了opendatasourceopenrowset这两个系统函数。注意:在导入时,如果被导入的表Table1有主键,这时就要判断Table1的主键是否会存在相同的值,如果存在是导入不成功的,只有主键唯一的情况才能导入成功。

Table1:被导入数据的表

Table2: 数据来源表

SourcePath: Access数据库和Excel文件的路径

FieldName: 字段

Value:

1. SQL Server同数据库之间进行数据导入INSERT INTOUPDATE SET

a. 导入一条记录

 INSERT INTO Table1 (FieldName1, FieldName2,…) Values (Value1, Value2,…)

b. 批量导入

 INSERT INTO Table1 (FieldName1, FieldName2,…)  SELECT (FieldName1, FieldName2,…) FROM Table2

c. 修改一条记录

UPDATE Table1 SET FieldName1= Value1, FieldName2= Value2,…WHERE 条件字段=条件值

d. 批量修改

   UPDATE Table1 SET Table1. FieldName1= Table2. FieldName1, Table1. FieldName2= Table2. FieldName2,… FROM Table2 WHERE Table1.FieldName3 = Table2. FieldName3

2. SQL Server同数据库之间进行数据导出SELECTE INTO

SELECT * INTO Table1 FROM Table2

   此时Table1SQL Server数据库是不存在的,否则导入不成功。*:代表要导入的字段

 

3. SQL Server不同数据库之间进行数据导入(INSERT INTO OPENDATASOURCE)

SELECT * INTO Table1 FROM OPENDATASOURCE'SQLOLEDB''Data Source=127.0.01;User ID=sa;Password=' ). Table2 

4. SQL Server不同数据库之间进行数据导出

INSERT INTO OPENDATASOURCE'SQLOLEDB''Data Source=127.0.01;User ID=sa;Password=' ). Table1  select * from Table2 

 

5. SQL Server数据库从Access数据库导入数据(INSERT INTO OPENDATESOURCE)

a. Access数据库无密码

INSERT INTO Table1 (FieldName1, FieldName2,…) SELECT FieldName1, FieldName2,…FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Persist Security Info=False')... Table2

 

b. Access数据库有密码(123456)

INSERT INTO Table1 (FieldName1, FieldName2,…) SELECT FieldName1, FieldName2,…FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SourcePath + "; User ID=Admin; Jet OLEDB:Database Password=123456;')... Table2

 

6. SQL Server数据库导出数据到Access数据库

aAccess数据库无密码

 INSERT INTO

OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SourcePath + ";Persist Security Info=False')... Table1 (FieldName1, FieldName2,…) SELECT FieldName1, FieldName2,… FROM Table2

 

bAccess数据库有密码(123456)

INSERT INTO

OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + SourcePath + "; User ID=Admin; Jet OLEDB:Database Password=123456;')... Table1 (FieldName1, FieldName2,…) SELECT FieldName1, FieldName2,… FROM Table2

 

7. SQL Server数据库从Excel文件导入数据

   SELECT * INTO Table1 FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Excel 5.0; HDR=YES;DATADAE=" + SourcePath + "')[Sheet1$]

book1.xlsSheet1中必须有和Table1表相对应的字段,否则会出错。

 

8. SQL Server数据库导出数据到Excel文件

       INSERT INTO OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;database="+ SourcePath +"', Sheet1$ ) select FieldName1, FieldName2,… FROM Table2

 

提醒:在SQL Server数据库与Access数据库、Excel文件之间的数据导入导出用上述方法有个缺陷就是SQL Server数据库与Access数据库、Excel文件必须是在同一计算机上。因为Access数据库、Excel文件是本地数据库。如果是不在同一计算机,可以先把数据读出存放在内存中再写入,这是利用内存做中转站。这样速度比上述方法速度慢。由于本人水平有限,上述如有不正确,不恰当之处,请指正!