平常從SQLSERVER中進(jìn)行導(dǎo)入導(dǎo)出時(shí),我們利用SQLSERVER中自帶的DTS轉(zhuǎn)換工具即可,很方便。但有些特殊的用法需要用語(yǔ)句進(jìn)行導(dǎo)入導(dǎo)出,工作中碰到這種情況,查了些資料,下面詳細(xì)介紹:
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到閩清網(wǎng)站設(shè)計(jì)與閩清網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋閩清地區(qū)。
一、從excel表導(dǎo)入到SQLSERVER use test go select * into test_table from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\11.xls;','select * from [結(jié)果$]') --1.通過(guò)Sql Server查詢分析器查詢D:\abc.xls 里面表 sheet1 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] --2.如果表a存在,并且表a的結(jié)構(gòu)與上一步的查詢的結(jié)構(gòu)一樣 可以使用 insert into a SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] --3.如果表a不存在,使用into a SELECT * into a FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\abc.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 說(shuō)明: test_table為SQLSERVER數(shù)據(jù)庫(kù)中的表,11.xls是EXCEL表, [結(jié)果$]是EXCEL表中的工作表,注意寫(xiě)法是工作表名加上$符號(hào)。 2從SQLSERVER數(shù)據(jù)庫(kù)中導(dǎo)出到EXCEL(一般用語(yǔ)句導(dǎo)庫(kù)是在應(yīng)用程序中,利用各種語(yǔ)言實(shí)現(xiàn),如果不做開(kāi)發(fā)項(xiàng)目,用DTS就很好了,在 SQLSERVER查詢器中利用單條SQL語(yǔ)句實(shí)現(xiàn)導(dǎo)入導(dǎo)出不方便,類(lèi)型轉(zhuǎn)換是個(gè)問(wèn)題,不好解決) 第一種,無(wú)法導(dǎo)入字段名:(excel表不存在,新建) EXEC master..xp_cmdshell 'bcp zhouzhi.dbo.數(shù)據(jù)庫(kù)表名 out "c:\test.xls" /c /S "服務(wù)器名" /U "用戶名" -P "密碼" ' 第二種,excel文件已存在,要手工把表字段名填到excel文件中去,再執(zhí)行下面: insert into OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'Excel 8.0;HDR=YES;DATABASE=c:\文件名.xls',sheet1$) select * from 表名 第三種,想實(shí)現(xiàn)全自動(dòng)轉(zhuǎn)字段名和記錄,一條語(yǔ)句實(shí)現(xiàn)不了,要用到過(guò)程,當(dāng)然如果要做一個(gè)自動(dòng)轉(zhuǎn)換程序,用VB或者VC語(yǔ)言也可實(shí)現(xiàn)。 把下面的過(guò)程全拷入SQLSERVER查詢分析器,執(zhí)行,生成一個(gè)過(guò)程,過(guò)程名為:p_exporttb ,然后按應(yīng)用例子執(zhí)行過(guò)程就OK了,自 動(dòng)導(dǎo)表 /*******************************/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_exporttb] GO create proc p_exporttb @sqlstr varchar(8000), --查詢語(yǔ)句,如果查詢語(yǔ)句中使用了order by ,請(qǐng)加上top 100 percent @path nvarchar(1000), --文件存放目錄 @fname nvarchar(250), --文件名 @sheetname varchar(250)='' --要?jiǎng)?chuàng)建的工作表名,默認(rèn)為文件名 as declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) --參數(shù)檢測(cè) if isnull(@fname,'')='' set @fname='temp.xls' if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#') --檢查文件是否已經(jīng)存在 if right(@path,1)'\' set @path=@path+'\' create table #tb(a bit,b bit,c bit) set @sql=@path+@fname insert into #tb exec master..xp_fileexist @sql --數(shù)據(jù)庫(kù)創(chuàng)建語(yǔ)句 set @sql=@path+@fname if exists(select 1 from #tb where a=1) set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE' +';CREATE_DB="'+@sql+'";DBQ='+@sql else set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES' +';DATABASE='+@sql+'"' --連接數(shù)據(jù)庫(kù) exec @err=sp_oacreate 'adodb.connection',@obj out if @err0 goto lberr exec @err=sp_oamethod @obj,'open',null,@constr if @err0 goto lberr --創(chuàng)建表的SQL declare @tbname sysname set @tbname='##tmp_'+convert(varchar(38),newid()) set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a' exec(@sql) select @sql='',@fdlist='' select @fdlist=@fdlist+',['+a.name+']' ,@sql=@sql+',['+a.name+'] ' +case when b.name like '%char' then case when a.length255 then 'memo' else 'text('+cast(a.length as varchar)+')' end when b.name like '%int' or b.name='bit' then 'int' when b.name like '%datetime' then 'datetime' when b.name like '%money' then 'money' when b.name like '%text' then 'memo' else b.name end FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp') and a.id=(select id from tempdb..sysobjects where name=@tbname) if @@rowcount=0 return select @sql='create table ['+@sheetname +']('+substring(@sql,2,8000)+')' ,@fdlist=substring(@fdlist,2,8000) exec @err=sp_oamethod @obj,'execute',@out out,@sql if @err0 goto lberr exec @err=sp_oadestroy @obj --導(dǎo)入數(shù)據(jù) set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES ;DATABASE='+@path+@fname+''',['+@sheetname+'$])' exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']') set @sql='drop table ['+@tbname+']' exec(@sql) return lberr: exec sp_oageterrorinfo 0,@src out,@desc out lbexit: select cast(@err as varbinary(4)) as 錯(cuò)誤號(hào) ,@src as 錯(cuò)誤源,@desc as 錯(cuò)誤描述 select @sql,@constr,@fdlist go /*******************應(yīng)用例子***************************/ p_exporttb @sqlstr='select * from 貸款大戶表' ,@path='c:\',@fname='aa.xls',@sheetname='貸款大戶表'
在開(kāi)始菜單的運(yùn)行框中輸入dtswiz,然后選擇源數(shù)據(jù)源和目標(biāo)數(shù)據(jù)源,例如:如果是從SQLServer中導(dǎo)出到Excel中,那么那么需要在其中輸入SQL語(yǔ)句或者選擇指定數(shù)據(jù)庫(kù)中的一個(gè)或多個(gè)表,然后再指定Excel的路徑和文件名,如果是從Excel導(dǎo)入到SQLServer中,就簡(jiǎn)單一些,選擇好具體的Excel文檔后,再選擇其中的某一個(gè)Sheet(工作表),然后再設(shè)置SQLServer的指定數(shù)據(jù)庫(kù)即可,還可以從SQLServer中的一個(gè)數(shù)據(jù)庫(kù)導(dǎo)入到SQLServer的另一個(gè)數(shù)據(jù)庫(kù)中,方法類(lèi)似。
第一步,打開(kāi)導(dǎo)入導(dǎo)出工具。(win7 32位系統(tǒng)下SQL自帶,64位系統(tǒng)下好像要裝)
第二步,選擇源文件的格式。這里txt格式文件選擇平面文件源。
第三步,瀏覽選擇文件源,其中代碼頁(yè)要改成簡(jiǎn)體中文。另外在列中可查看導(dǎo)入的數(shù)據(jù)列是否正確,在高級(jí)中可編輯字段名。
第四步,選擇目標(biāo)服務(wù)器和數(shù)據(jù)庫(kù)。就是確定數(shù)據(jù)文件要導(dǎo)入到哪一個(gè)一個(gè)服務(wù)器的哪一個(gè)數(shù)據(jù)庫(kù)中。
第五步,選擇目標(biāo)表,打開(kāi)編輯映射。默認(rèn)時(shí)以文件名建立新表。
第六步,編輯映射。把數(shù)據(jù)對(duì)應(yīng)導(dǎo)入數(shù)據(jù)庫(kù)各字段中!若是目標(biāo)表是新建的,那么要編輯數(shù)據(jù)庫(kù)中的個(gè)字段名以及數(shù)據(jù)類(lèi)型。
那么做完這些后只要數(shù)據(jù)源沒(méi)有問(wèn)題,單擊下一步……就可以搞定了。
現(xiàn)在說(shuō)說(shuō)導(dǎo)入數(shù)據(jù)時(shí)要注意的地方。在導(dǎo)入txt格式的文件時(shí)首先需要注意數(shù)據(jù)的排列。每一列之間用統(tǒng)一的分隔符隔開(kāi),刪除無(wú)關(guān)的行信息。另外需要注意的是,txt格式的文件導(dǎo)入時(shí)空格也是被讀取的,所以要?jiǎng)h除空格。其實(shí)導(dǎo)入時(shí)我遇到的就這么點(diǎn)問(wèn)題,卻足足卡了我一天半。數(shù)據(jù)按要求排列后如圖所示:
SQLServer表數(shù)據(jù)導(dǎo)出為Excel文件方法:
1、選擇數(shù)據(jù)庫(kù),啟動(dòng)導(dǎo)入和導(dǎo)出向?qū)?/p>
2、選擇數(shù)據(jù)源
3、選擇目標(biāo)
4、然后一直點(diǎn)“下一步”按鈕即可
1開(kāi)始菜單里sql server --DTC,(數(shù)據(jù)導(dǎo)入導(dǎo)出工具)
2選擇數(shù)據(jù)源(就是你當(dāng)前的數(shù)據(jù)庫(kù))
3選擇導(dǎo)出的類(lèi)型和數(shù)據(jù)源
4直接導(dǎo)出即可。
5也可以通過(guò)備份數(shù)據(jù)庫(kù)的方式吧數(shù)據(jù)傳輸?shù)搅硪慌_(tái)機(jī)器上,但必須是SQL server才能看到,
導(dǎo)入導(dǎo)出功能可以吧數(shù)據(jù)導(dǎo)出到excel、access,mysql等不同的數(shù)據(jù)庫(kù)中
網(wǎng)頁(yè)名稱:sqlserver導(dǎo)入導(dǎo)出工具,sqlserver導(dǎo)入和導(dǎo)出數(shù)據(jù)
分享鏈接:http://chinadenli.net/article28/dsicocp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站建設(shè)、外貿(mào)建站、網(wǎng)站導(dǎo)航、虛擬主機(jī)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)