📄 月光软件站 - 编程文档 - 数据库 - sql语句导入导出大全.htm
字号:
out c:\DT.txt -c -Sservername -Usa -Ppassword’ <BR>或 <BR>EXEC
master..xp_cmdshell ’bcp "Select * from dbname..tablename" queryout
c:\DT.txt -c -Sservername -Usa -Ppassword’ </P>
<P>导出到TXT文本,用逗号分开 <BR>exec master..xp_cmdshell ’bcp "库名..表名" out
"d:\tt.txt" -c -t ,-U sa -P password’ </P>
<P><BR>BULK INSERT 库名..表名 <BR>FROM ’c:\test.txt’ <BR>WITH (
<BR> FIELDTERMINATOR = ’;’, <BR>
ROWTERMINATOR = ’\n’ <BR>) </P>
<P><BR>--/* dBase IV文件 <BR>select * from
<BR>OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’ <BR>,’dBase
IV;HDR=NO;IMEX=2;DATABASE=C:\’,’select * from [客户资料4.dbf]’) <BR>--*/
</P>
<P>--/* dBase III文件 <BR>select * from
<BR>OPENROWSET(’MICROSOFT.JET.OLEDB.4.0’ <BR>,’dBase
III;HDR=NO;IMEX=2;DATABASE=C:\’,’select * from [客户资料3.dbf]’)
<BR>--*/ </P>
<P>--/* FoxPro 数据库 <BR>select * from openrowset(’MSDASQL’,
<BR>’Driver=Microsoft Visual FoxPro
Driver;SourceType=DBF;SourceDB=c:\’, <BR>’select * from [aa.DBF]’)
<BR>--*/ </P>
<P>/**************导入DBF文件****************/ <BR>select * from
openrowset(’MSDASQL’, <BR>’Driver=Microsoft Visual FoxPro Driver;
<BR>SourceDB=e:\VFP98\data; <BR>SourceType=DBF’, <BR>’select * from
customer where country != "USA" order by country’) <BR>go
<BR>/***************** 导出到DBF ***************/
<BR>如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句 </P>
<P>insert into openrowset(’MSDASQL’, <BR>’Driver=Microsoft Visual
FoxPro Driver;SourceType=DBF;SourceDB=c:\’, <BR>’select * from
[aa.DBF]’) <BR>select * from 表 </P>
<P>说明: <BR>SourceDB=c:\ 指定foxpro表所在的文件夹
<BR>aa.DBF 指定foxpro表的文件名.
</P>
<P> </P>
<P><BR>/*************导出到Access********************/ <BR>insert into
openrowset(’Microsoft.Jet.OLEDB.4.0’, <BR>
’x:\A.mdb’;’admin’;’’,A表) select * from 数据库名..B表 </P>
<P>/*************导入Access********************/ <BR>insert into B表
selet * from openrowset(’Microsoft.Jet.OLEDB.4.0’, <BR>
’x:\A.mdb’;’admin’;’’,A表) </P>
<P>********************* 导入 xml 文件 </P>
<P>DECLARE @idoc int <BR>DECLARE @doc varchar(1000) <BR>--sample XML
document <BR>SET @doc =’ <BR><root> <BR> <Customer
cid= "C1" name="Janine" city="Issaquah">
<BR> <Order oid="O1"
date="1/20/1996" amount="3.5" />
<BR> <Order oid="O2"
date="4/30/1997" amount="13.4">Customer was very satisfied
<BR> </Order> <BR>
</Customer> <BR> <Customer cid="C2"
name="Ursula" city="Oelde" > <BR>
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
<BR>
white red">
<BR>
<Urgency>Important</Urgency>
<BR>
Happy Customer. <BR> </Order>
<BR> <Order oid="O4"
date="1/20/1996" amount="10000"/> <BR>
</Customer> <BR></root> <BR>’ <BR>-- Create an internal
representation of the XML document. <BR>EXEC sp_xml_preparedocument
@idoc OUTPUT, @doc </P>
<P>-- Execute a SELECT statement using OPENXML rowset provider.
<BR>SELECT * <BR>FROM OPENXML (@idoc, ’/root/Customer/Order’, 1)
<BR> WITH (oid
char(5),
<BR>
amount float,
<BR>
comment ntext ’text()’) <BR>EXEC sp_xml_removedocument @idoc </P>
<P><BR>/********************导整个数据库*********************************************/
</P>
<P>用bcp实现的存储过程 </P>
<P><BR>/* <BR> 实现数据导入/导出的存储过程
<BR>
根据不同的参数,可以实现导入/导出整个数据库/单个表 <BR> 调用示例: <BR>--导出调用示例
<BR>----导出单个表 <BR>exec file2table
’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,1 <BR>----导出整个数据库 <BR>exec
file2table ’zj’,’’,’’,’xzkh_sa’,’C:\docman’,1 </P>
<P>--导入调用示例 <BR>----导入单个表 <BR>exec file2table
’zj’,’’,’’,’xzkh_sa..地区资料’,’c:\zj.txt’,0 <BR>----导入整个数据库 <BR>exec
file2table ’zj’,’’,’’,’xzkh_sa’,’C:\docman’,0 </P>
<P>*/ <BR>if exists(select 1 from sysobjects where name=’File2Table’
and objectproperty(id,’IsProcedure’)=1) <BR> drop procedure
File2Table <BR>go <BR>create procedure File2Table <BR>@servername
varchar(200) --服务器名 <BR>,@username varchar(200)
--用户名,如果用NT验证方式,则为空’’ <BR>,@password varchar(200) --密码
<BR>,@tbname varchar(500)
--数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表 <BR>,@filename
varchar(1000)
--导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt
<BR>,@isout bit --1为导出,0为导入 <BR>as
<BR>declare @sql varchar(8000) </P>
<P>if @tbname like ’%.%.%’ --如果指定了表名,则直接导出单个表 <BR>begin
<BR> set @sql=’bcp <A href="mailto:’+@tbname">’+@tbname</A>
<BR> +case when @isout=1 then ’ out ’ else ’ in ’ end
<BR> +’ "<A href="mailto:’+@filename+’">’+@filename+’</A>" /w’
<BR> +’ /S <A href="mailto:’+@servername">’+@servername</A>
<BR> +case when isnull(@username,’’)=’’ then ’’ else ’ /U <A
href="mailto:’+@username">’+@username</A> end <BR> +’ /P
’+isnull(@password,’’) <BR> exec master..xp_cmdshell @sql
<BR>end <BR>else <BR>begin --导出整个数据库,定义游标,取出所有的用户表 <BR> declare
@m_tbname varchar(250) <BR> if right(@filename,1)<>’\’
set @filename=@filename+’\’ </P>
<P> set @m_tbname=’declare #tb cursor for select name from <A
href="mailto:’+@tbname+’..sysobjects">’+@tbname+’..sysobjects</A>
where xtype=’’U’’’ <BR> exec(@m_tbname) <BR> open #tb
<BR> fetch next from #tb into @m_tbname <BR> while
@@fetch_status=0 <BR> begin <BR> set @sql=’bcp <A
href="mailto:’+@tbname+’..’+@m_tbname">’+@tbname+’..’+@m_tbname</A>
<BR> +case when @isout=1 then ’ out ’ else ’ in ’ end
<BR> +’ "<A
href="mailto:’+@filename+@m_tbname+’.txt">’+@filename+@m_tbname+’.txt</A>
" /w’ <BR> +’ /S <A
href="mailto:’+@servername">’+@servername</A> <BR> +case
when isnull(@username,’’)=’’ then ’’ else ’ /U <A
href="mailto:’+@username">’+@username</A> end <BR> +’ /P
’+isnull(@password,’’) <BR> exec master..xp_cmdshell @sql
<BR> fetch next from #tb into @m_tbname <BR> end
<BR> close #tb <BR> deallocate #tb <BR>end <BR>go
</P>
<P><BR>/**********************Excel导到Txt****************************************/
<BR>想用 <BR>select * into opendatasource(...) from
opendatasource(...) <BR>实现将一个Excel文件内容导入到一个文本文件 </P>
<P>假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位) <BR>且银行帐号导出到文本文件后分两部分,前8位和后8位分开。
</P>
<P><BR>如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2
<BR>然后就可以用下面的语句进行插入 <BR>注意文件名和目录根据你的实际情况进行修改. </P>
<P>insert into <BR>opendatasource(’MICROSOFT.JET.OLEDB.4.0’
<BR>,’Text;HDR=Yes;DATABASE=C:\’ <BR>)...[aa#txt] <BR>--,aa#txt)
<BR>--*/ <BR>select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
<BR>from <BR>opendatasource(’MICROSOFT.JET.OLEDB.4.0’ <BR>,’Excel
5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls’ <BR>--,Sheet1$)
<BR>)...[Sheet1$] </P>
<P>如果你想直接插入并生成文本文件,就要用bcp </P>
<P>declare @sql varchar(8000),@tbname varchar(50) </P>
<P>--首先将excel表内容导入到一个全局临时表 <BR>select @tbname=’[##temp’+cast(newid()
as varchar(40))+’]’ <BR> ,@sql=’select
姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) <BR>into <A
href="mailto:’+@tbname+’">’+@tbname+’</A> from
<BR>opendatasource(’’MICROSOFT.JET.OLEDB.4.0’’ <BR>,’’Excel
5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls’’ <BR>)...[Sheet1$]’
<BR>exec(@sql) </P>
<P>--然后用bcp从全局临时表导出到文本文件 <BR>set @sql=’bcp "<A
href="mailto:’+@tbname+’">’+@tbname+’</A>" out "c:\aa.txt"
/S"(local)" /P"" /c’ <BR>exec master..xp_cmdshell @sql </P>
<P>--删除临时表 <BR>exec(’drop table <A
href="mailto:’+@tbname">’+@tbname</A>) </P>
<P><BR>用bcp将文件导入导出到数据库的存储过程: </P>
<P><BR>/*--bcp-二进制文件的导入导出 </P>
<P> 支持image,text,ntext字段的导入/导出
<BR> image适合于二进制文件;text,ntext适合于文本数据文件 </P>
<P> 注意:导入时,将覆盖满足条件的所有行 <BR> 导出时,将把所有满足条件的行也出到指定文件中 </P>
<P> 此存储过程仅用bcp实现 <BR>邹建 2003.08-----------------*/ </P>
<P>/*--调用示例 <BR>--数据导出 <BR> exec p_binaryIO
’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’ </P>
<P>--数据导出 <BR> exec p_binaryIO
’zj’,’’,’’,’acc_演示数据..tb’,’img’,’c:\zj1.dat’,’’,0 <BR>--*/ <BR>if
exists (select * from dbo.sysobjects where id =
object_id(N’[dbo].[p_binaryIO]’) and OBJECTPROPERTY(id,
N’IsProcedure’) = 1) <BR>drop procedure [dbo].[p_binaryIO] <BR>GO
</P>
<P>Create proc p_binaryIO <BR>@servename varchar (30),--服务器名称
<BR>@username varchar (30), --用户名 <BR>@password varchar (30), --密码
<BR>@tbname varchar (500), --数据库..表名 <BR>@fdname varchar
(30), --字段名 <BR>@fname varchar (1000),
--目录+文件名,处理过程中要使用/覆盖:@filename+.bak <BR>@tj varchar (1000)=’’,
--处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀 <BR>@isout bit=1
--1导出((默认),0导入 <BR>AS <BR>declare @fname_in varchar(1000)
--bcp处理应答文件名 <BR> ,@fsize varchar(20) --要处理的文件的大小
<BR> ,@m_tbname varchar(50) --临时表名 <BR> ,@sql
varchar(8000) </P>
<P>--则取得导入文件的大小 <BR>if @isout=1 <BR> set @fsize=’0’ <BR>else
<BR>begin <BR> create table #tb(可选名 varchar(20),大小 int
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -