zl程序教程

您现在的位置是:首页 >  后端

当前栏目

SQL语句导入导出大全

导入导出SQL 语句 大全
2023-06-13 09:13:46 时间
导出到excel 
EXEC master..xp_cmdshell "bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P"""
导入Excel 


SELECT * FROM OpenDataSource( "Microsoft.Jet.OLEDB.4.0", "Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0")...xactions 


动态文件名 


declare @fn varchar(20),@s varchar(1000)  
set @fn = "c:\test.xls"  
set @s ="""Microsoft.Jet.OLEDB.4.0"",  
""Data Source=""+@fn+"";User ID=Admin;Password=;Extended properties=Excel 5.0"""  
set @s = "SELECT * FROM OpenDataSource ("+@s+")...sheet1$"  
exec(@s) 

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+" " 转换后的别名  
FROM OpenDataSource( "Microsoft.Jet.OLEDB.4.0",  
"Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0")...xactions 


EXCEL导到远程SQL 


insert OPENDATASOURCE(  
"SQLOLEDB",  
"Data Source=远程ip;User ID=sa;Password=密码"  
).库名.dbo.表名 (列名1,列名2)  
SELECT 列名1,列名2  
FROM OpenDataSource( "Microsoft.Jet.OLEDB.4.0",  
"Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0")...xactions 


导入文本文件 


EXEC master..xp_cmdshell "bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword" 


导出文本文件 


EXEC master..xp_cmdshell "bcp dbname..tablename 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" 


导出到TXT文本,用逗号分开 


exec master..xp_cmdshell "bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password" 
BULK INSERT 库名..表名 
FROM "c:\test.txt"  
WITH (  
FIELDTERMINATOR = ";",  
ROWTERMINATOR = "\n"  
)  


--/* dBase IV文件  
select * from  
OPENROWSET("MICROSOFT.JET.OLEDB.4.0"  
,"dBase IV;HDR=NO;IMEX=2;DATABASE=C:\","select * from [客户资料4.dbf]")  
--*/  

--/* dBase III文件  
select * from  
OPENROWSET("MICROSOFT.JET.OLEDB.4.0"  
,"dBase III;HDR=NO;IMEX=2;DATABASE=C:\","select * from [客户资料3.dbf]")  
--*/  

--/* FoxPro 数据库  
select * from openrowset("MSDASQL",  
"Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\",  
"select * from [aa.DBF]")  
--*/  


导入DBF文件 


select * from openrowset("MSDASQL",  
"Driver=Microsoft Visual FoxPro Driver;  
SourceDB=e:\VFP98\data;  
SourceType=DBF",  
"select * from customer where country != "USA" order by country")  
go 


导出到DBF 

如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句  


insert into openrowset("MSDASQL",  
"Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\",  
"select * from [aa.DBF]")  
select * from 表  

说明:  
SourceDB=c:\ 指定foxpro表所在的文件夹  
aa.DBF 指定foxpro表的文件名. 


导出到Access 


insert into openrowset("Microsoft.Jet.OLEDB.4.0",  
"x:\A.mdb";"admin";"",A表) select * from 数据库名..B表 


导入Access 


insert into B表 selet * from openrowset("Microsoft.Jet.OLEDB.4.0",  
"x:\A.mdb";"admin";"",A表) 


文件名为参数 


declare @fname varchar(20) 
set @fname = "d:\test.mdb"  
exec("SELECT a.* FROM opendatasource(""Microsoft.Jet.OLEDB.4.0"",  
"""+@fname+""";""admin"";"""", topics) as a ")  

SELECT *  
FROM OpenDataSource( "Microsoft.Jet.OLEDB.4.0",  
"Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;") 


导入 xml 文件 [Page] 


DECLARE @idoc int  
DECLARE @doc varchar(1000)  
--sample XML document  
SET @doc ="  
<root>  
<Customer cid= "C1" name="Janine" city="Issaquah">  
<Order oid="O1" date="1/20/1996" amount="3.5" />  
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied  
</Order>  
</Customer>  
<Customer cid="C2" name="Ursula" city="Oelde" >  
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue  
white red">  
<Urgency>Important</Urgency>  
Happy Customer.  
</Order>  
<Order oid="O4" date="1/20/1996" amount="10000"/>  
</Customer>  
</root>  
"  
-- Create an internal representation of the XML document.  
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc  

-- Execute a SELECT statement using OPENXML rowset provider.  
SELECT *  
FROM OPENXML (@idoc, "/root/Customer/Order", 1)  
WITH (oid char(5),  
amount float,  
comment ntext "text()")  
EXEC sp_xml_removedocument @idoc 


Excel导到Txt 


想用 select * into opendatasource(...) from opendatasource(...) 


实现将一个Excel文件内容导入到一个文本文件 

假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)  
且银行帐号导出到文本文件后分两部分,前8位和后8位分开。  

如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2 ,然后就可以用下面的语句进行插入,注意文件名和目录根据你的实际情况进行修改.  


insert into  
opendatasource("MICROSOFT.JET.OLEDB.4.0"  
,"Text;HDR=Yes;DATABASE=C:\"  
)...[aa#txt]  
--,aa#txt)  
--*/  
select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)  
from  
opendatasource("MICROSOFT.JET.OLEDB.4.0"  
,"Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls"  
--,Sheet1$)  
)...[Sheet1$] 


如果你想直接插入并生成文本文件,就要用bcp  


declare @sql varchar(8000),@tbname varchar(50)  

--首先将excel表内容导入到一个全局临时表  
select @tbname="[##temp"+cast(newid() as varchar(40))+"]"  
,@sql="select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)  
into "+@tbname+" from  
opendatasource(""MICROSOFT.JET.OLEDB.4.0""  
,""Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls""  
)...[Sheet1$]"  
exec(@sql)  

--然后用bcp从全局临时表导出到文本文件  
set @sql="bcp ""+@tbname+"" out "c:\aa.txt" /S"(local)" /P"" /c"  
exec master..xp_cmdshell @sql  

--删除临时表  
exec("drop table "+@tbname) 


导整个数据库 

用bcp实现的存储过程  


/*  
实现数据导入/导出的存储过程  
根据不同的参数,可以实现导入/导出整个数据库/单个表  
调用示例:  
--导出调用示例  
----导出单个表  
exec file2table "zj","","","xzkh_sa..地区资料","c:\zj.txt",1  
----导出整个数据库  
exec file2table "zj","","","xzkh_sa","C:\docman",1  

--导入调用示例  
----导入单个表  
exec file2table "zj","","","xzkh_sa..地区资料","c:\zj.txt",0  
----导入整个数据库  
exec file2table "zj","","","xzkh_sa","C:\docman",0  

*/  
if exists(select 1 from sysobjects where name="File2Table" and objectproperty(id,"IsProcedure")=1)  
drop procedure File2Table  
go  
create procedure File2Table  
@servername varchar(200) --服务器名  
,@username varchar(200) --用户名,如果用NT验证方式,则为空""  
,@password varchar(200) --密码  
,@tbname varchar(500) --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表  
,@filename varchar(1000) --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt  
,@isout bit --1为导出,0为导入  
as  
declare @sql varchar(8000)  

if @tbname like "%.%.%" --如果指定了表名,则直接导出单个表  
begin  
set @sql="bcp "+@tbname  
+case when @isout=1 then " out " else " in " end  
+" ""+@filename+"" /w"  
+" /S "+@servername  
+case when isnull(@username,"")="" then "" else " /U "+@username end  
+" /P "+isnull(@password,"")  
exec master..xp_cmdshell @sql  
end  
else  
begin --导出整个数据库,定义游标,取出所有的用户表  
declare @m_tbname varchar(250)  
if right(@filename,1)<>"\" set @filename=@filename+"\"  

set @m_tbname="declare #tb cursor for select name from "+@tbname+"..sysobjects where xtype=""U"""  
exec(@m_tbname)  
open #tb  
fetch next from #tb into @m_tbname  
while @@fetch_status=0  
begin  
set @sql="bcp "+@tbname+".."+@m_tbname  
+case when @isout=1 then " out " else " in " end  
+" ""+@filename+@m_tbname+".txt " /w"  
+" /S "+@servername  
+case when isnull(@username,"")="" then "" else " /U "+@username end  
+" /P "+isnull(@password,"")  
exec master..xp_cmdshell @sql  
fetch next from #tb into @m_tbname  
end  
close #tb  
deallocate #tb  
end  
go 


 Oracle  


EXEC sp_addlinkedserver "OracleSvr",  
"Oracle 7.3",  
"MSDAORA",  
"ORCLDB"  
GO  

delete from openquery(mailser,"select * from yulin")  

select * from openquery(mailser,"select * from yulin")  

update openquery(mailser,"select * from yulin where id=15")set disorder=555,catago=888  

insert into openquery(mailser,"select disorder,catago from yulin")values(333,777) 



补充:  

对于用bcp导出,是没有字段名的.  
用openrowset导出,需要事先建好表.  
用openrowset导入,除ACCESS及EXCEL外,均不支持非本机数据导入