David.Ko

          Follow my heart!
          posts - 100, comments - 11, trackbacks - 0, articles - 0
             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          SQL語句大全

          Posted on 2007-09-30 12:31 David.Ko 閱讀(278) 評論(0)  編輯  收藏 所屬分類: DataBase

          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 文件

          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外,均不支持非本機數據導入

          主站蜘蛛池模板: 兴安县| 广昌县| 舒兰市| 杭锦后旗| 金塔县| 攀枝花市| 武功县| 丰台区| 斗六市| 竹北市| 凤庆县| 镇远县| 沅江市| 固阳县| 鸡泽县| 毕节市| 株洲市| 云霄县| 紫阳县| 定边县| 普陀区| 寻甸| 博罗县| 承德县| 邵东县| 苗栗县| 分宜县| 申扎县| 建平县| 赤水市| 榆林市| 方正县| 南通市| 都昌县| 怀远县| 宁陵县| 龙南县| 芜湖市| 泊头市| 桐梓县| 中方县|