本篇文章主要总结MS-SQL数据的导入导出,包括MS-SQL 对远程 MS-SQL,Oracle,Access数据的读取,更新,插入和删除, 以及对以Excel,txt文件存储数据的导入与导出,和bcp的简单使用。
完成这些操作主要使用以下几个函数OPENROWSET,OPENQUERY,OPENDATASOURCE
-- 类别:总结
--charry0110(晓风残月)
--作者:陈海雨
--*
远程库
select
* from openrowset('SQLOLEDB','
远程服务器名
'
;
'
用户名
'
;
'
密码
'
;
'
库名
.dbo.
表名
'
)
insert
into openrowset('SQLOLEDB','BERRY';'sa';'sa',tt.dbo.ALaw_BestbigPunish)(OneName) select 'c'--
添加
select
* from openrowset('SQLOLEDB','BERRY';'sa';'sa',tt.dbo.ALaw_FilePunish)--
选择
delete
from openrowset('SQLOLEDB','BERRY';'sa';'sa',tt.dbo.ALaw_BestbigPunish)--
删除
update
openrowset('SQLOLEDB','BERRY';'sa';'sa',tt.dbo.ALaw_BestbigPunish)--
更新
set
OneName='b'
--
注意
'192.168.18.252';'sa';'abc'
中间是
";"
,而不是
","
。
select
a.* from OPENQUERY('SQLOLEDB','BERRY';'sa';'sa',
库名
.
dbo.
表名
)
a
SELECT
a.* FROM OPENQUERY ('oradb','192.168.0.111';'sa';'sa',
库名
.
dbo.
表名
)
a
SELECT
* FROM OPENDATASOURCE('SQLOLEDB','Data Source=192.168.0.111;User ID=sa;Password=sa').tt.dbo.ALaw_BestbigPunish
INSERT
INTO OPENDATASOURCE('SQLOLEDB','Data Source=192.168.0.111;User ID=sa;Password=sa').tt.dbo.ALaw_FilePunish(CaseName) select Num from aa.dbo.ydy
select
* from OPENROWSET('SQLOLEDB','192.168.0.111';'sa';'sa', 'select * from tt.dbo.ALaw_FilePunish')
insert
into OPENROWSET('SQLOLEDB','192.168.0.111';'sa';'sa', 'select CaseName from tt.dbo.ALaw_FilePunish') SELECT Num FROM aa.dbo.ydy
--
第二个参数
webconfig
连接字符串可以使用
delphi
、
visual studio
等开发工具中的
ADO
控件自动生成相应的连接字符串
--*Excel
select
a.* from OpenRowSet('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;DataBase=D:/test.xls',sheet1$) a
select
a.* into ydy from OpenRowSet('Microsoft.Jet.OLEDB.4.0','EXCEL 8.0;DataBase=D:/test.xls',sheet1$) a
SELECT
a.* FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source= "D:/test.xls";Extended properties=Excel 8.0')...sheet1$ a
select
* from ydy
--
注意
sheet1$
是否正确
--*Access
SELECT
* FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','D:/db.mdb';'admin';'','SELECT * FROM vote')
select
* from OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0',
'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/db.mdb;Persist Security Info=False')...vote
--*txt
select
* from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=D:/',[sopendata#txt])
select
* from OPENDATASOURCE('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=D:/')...[sopendata#txt]
delete
from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=D:/', [sopendata#txt])
/*ID,Name,Num
1,Jim,3
2,Kate,4
3,Tom,5*/
--
在这里文件名中的
.
要使用
#
代替
,
在向文本导出时
,
不仅文本文件要存在
,
而且第一行必须和要导出表的字段一至
--
非
SQL Server
数据库在
OPENDATASOURCE(...)
后面引用数据库中的表时使用
"...”
,
insert
into OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Text;DATABASE=D:/',[sopendata#txt])
select
* from t1
--*sql
不支持导入
word
--
解决一:文本文件,可惜这样是要求这些数据排版得有规律。
--
解决二:一般是先拷贝进
excel
,然后再导入
sqlserver
的
---------------------------------------------------------------------------------------
----bcp
--
假设要从硬盘文件
c:/DT.'txt'
中导入文件,则如下代码实现:
EXEC
master..xp_cmdshell 'bcp "aa.dbo.ydy" in D:/dbo.txt -c -charry -sa -sa'
--
假设导出文件到
c:/DT.'txt'
,则如下代码实现:
EXEC
master..xp_cmdshell 'bcp "aa.dbo.ydy" out c:/DT.txt -c -Sservername -Usa -Ppassword'
EXEC
master..xp_cmdshell 'bcp "Select * from dbname..tablename"
queryout c:/DT.txt -c -Sservername -Usa -Ppassword'