2007年2月14日 星期三

將sql server裏的資料導出到文本

想把一張Table裏的資料導出到文本中,但是需要將每條記錄導成一個文本,而不是全部導成一個文本,
比如現有表如下
id(varchar(50) pk) detail(text)
aaa 11111
bbb 43424
ccc 324234

導出後指定目錄裏面應該有三個文件:aaa.txt, bbb.txt, ccc.txt, 文本內容爲相應的detail列中的內容,也就是說,將ID欄位作爲檔案名,detail欄位元作爲文本內容,如何以存儲過程實現 ?

--處理示例

--測試表
create table tb(id varchar(50) primary key,detail text)
insert tb select 'aaa','11111'
union all select 'bbb','43424'
union all select 'ccc','324234'
go


--處理的存儲過程
create proc p_export
@path nvarchar(1000) --導出的文字檔案保存的目錄
as
declare @s nvarchar(4000)
if isnull(@path,'')='' set @path='c:\'
else if right(@path,1)<>'\' set @path=@path+'\'


--用游標建構每條記錄的bcp導出語句,BCP的語法參考sql help
declare tb cursor local
for
select 'BCP "select detail from '
+quotename(db_name())
+'..tb where id='
+quotename(id,N'''')
+'" queryout "'+@path
+id+'.txt" /T /w'
from tb
open tb
fetch tb into @s
while @@fetch_status=0
begin

--調用xp_cmdshell存儲過程執行bcp進行導出處理
exec master..xp_cmdshell @s,no_output
--爲方便觀察bcp語句,將處理的語句列印出來
print(@s)
fetch tb into @s
end
close tb
deallocate tb
go


--調用
exec p_export 'c:\'
go


--刪除測試
drop table tb
drop proc p_export

沒有留言: