SQL Server 的 SQL 语句导入导出大全

ms sql server数据库sql语句导入导出大全,包括与其他数据库和文件的数据的导入导出。

    /*******  导出到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

    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

    /** 导入文本文件

    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:vfp98data;

    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表)

    *********************  导入 xml 文件

    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

    /********************导整个数据库*********************************************/

    用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

    /**********************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将文件导入导出到数据库的存储过程:

    /*–bcp-二进制文件的导入导出

    支持image,text,ntext字段的导入/导出

    image适合于二进制文件;text,ntext适合于文本数据文件

    注意:导入时,将覆盖满足条件的所有行

      导出时,将把所有满足条件的行也出到指定文件中

    此存储过程仅用bcp实现

    邹建 2003.08—————–*/

    /*–调用示例

    –数据导出

    exec p_binaryio ‘zj’,”,”,’acc_演示数据..tb’,’img’,’c:zj1.dat’

    –数据导出

    exec p_binaryio ‘zj’,”,”,’acc_演示数据..tb’,’img’,’c:zj1.dat’,”,0

    –*/

    if exists (select * from dbo.sysobjects where id = object_id(n'[dbo].[p_binaryio]’) and objectproperty(id, n’isprocedure’) = 1)

    drop procedure [dbo].[p_binaryio]

    go

    create proc p_binaryio

    @servename varchar (30),–服务器名称

    @username varchar (30), –用户名

    @password varchar (30), –密码

    @tbname varchar (500),  –数据库..表名

    @fdname varchar (30),  –字段名

    @fname varchar (1000), –目录+文件名,处理过程中要使用/覆盖:@filename+.bak

    @tj varchar (1000)=”,  –处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀

    @isout bit=1   –1导出((默认),0导入

    as

    declare @fname_in varchar(1000) –bcp处理应答文件名

    ,@fsize varchar(20)   –要处理的文件的大小

    ,@m_tbname varchar(50)  –临时表名

    ,@sql varchar(8000)

    –则取得导入文件的大小

    if @isout=1

    set @fsize=’0′

    else

    begin

    create table #tb(可选名 varchar(20),大小 int

      ,创建日期 varchar(10),创建时间 varchar(20)

      ,上次写操作日期 varchar(10),上次写操作时间 varchar(20)

      ,上次访问日期 varchar(10),上次访问时间 varchar(20),特性 int)

    insert into #tb

    exec master..xp_getfiledetails @fname

    select @fsize=大小 from #tb

    drop table #tb

    if @fsize is null

    begin

      print ‘文件未找到’

      return

    end

    end

    –生成数据处理应答文件

    set @m_tbname='[##temp’+cast(newid() as varchar(40))+’]’

    set @sql=’select * into ‘+@m_tbname+’ from(

    select null as 类型

    union all select 0 as 前缀

    union all select ‘+@fsize+’ as 长度

    union all select null as 结束

    union all select null as 格式

    ) a’

    exec(@sql)

    select @fname_in=@fname+’_temp’

    ,@sql=’bcp “’+@m_tbname+’“ out “’+@fname_in

    +’“ /s“’+@servename

    +case when isnull(@username,”)=” then ”

      else ‘“ /u“’+@username end

    +’“ /p“’+isnull(@password,”)+’“ /c’

    exec master..xp_cmdshell @sql

    –删除临时表

    set @sql=’drop table ‘+@m_tbname

    exec(@sql)

    if @isout=1

    begin

    set @sql=’bcp “select top 1 ‘+@fdname+’ from ‘

      +@tbname+case isnull(@tj,”) when ” then ”

       else ‘ where ‘+@tj end

      +’“ queryout “’+@fname

      +’“ /s“’+@servename

      +case when isnull(@username,”)=” then ”

       else ‘“ /u“’+@username end

      +’“ /p“’+isnull(@password,”)

      +’“ /i“’+@fname_in+’“’

    exec master..xp_cmdshell @sql

    end

    else

    begin

    –为数据导入准备临时表

    set @sql=’select top 0 ‘+@fdname+’ into ‘

      +@m_tbname+’ from ‘ +@tbname

    exec(@sql)

    –将数据导入到临时表

    set @sql=’bcp “’+@m_tbname+’“ in “’+@fname

      +’“ /s“’+@servename

      +case when isnull(@username,”)=” then ”

       else ‘“ /u“’+@username end

      +’“ /p“’+isnull(@password,”)

      +’“ /i“’+@fname_in+’“’

    exec master..xp_cmdshell @sql

    –将数据导入到正式表中

    set @sql=’update ‘+@tbname

      +’ set ‘+@fdname+’=b.’+@fdname

      +’ from ‘+@tbname+’ a,’

      +@m_tbname+’ b’

      +case isnull(@tj,”) when ” then ”

       else ‘ where ‘+@tj end

    exec(@sql)

    –删除数据处理临时表

    set @sql=’drop table ‘+@m_tbname

    end

    –删除数据处理应答文件

    set @sql=’del ‘+@fname_in

    exec master..xp_cmdshell @sql

    go

    /** 导入文本文件

    exec master..xp_cmdshell ‘bcp “dbname..tablename“ in c:dt.txt -c -sservername -usa -ppassword’

    改为如下,不需引号

    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’

    此句需加引号

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐