ehxz 发表于 2009-1-14 15:40:31

sqlserver使用bcp分解字符串

表tmp(日期 datetime ,参数varchar(1000))
现要求将字段【参数】的内容分解形成一个临时表,(由于表tmp的数据很多)要求不能使用游标
日期          参数         
2008-10-10000004741|1000400821|81100390861|100016179|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|
2008-10-10000004742|1000400822|81100390862|100016175|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|
2008-10-10000004743|1000400823|81100390863|100016175|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|
2008-10-10000004744|1000400824|81100390865|100016174|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|
2008-10-10000004745|1000400825|81100390866|100016173|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|
2008-10-10000004746|1000400826|81100390867|100016172|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|
2008-10-10000004747|1000400827|81100390868|100016171|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|

--------------------------------------------------------------------------------
登记号      处方号      单号      流水号      项目名称      单价      数量人员    经办人单位 规格
0000004741100040082181100390861 100016179 0.9%氯化钠注射液 5.30001.0    陶先明-1    瓶500ml
0000004742100040082281100390862 100016175 0.9%氯化钠注射液 5.30001.0    陶先明-1    瓶500ml
0000004743100040082381100390863 100016175 0.9%氯化钠注射液 5.30001.0    陶先明-1    瓶500ml
0000004744100040082481100390864 100016174 0.9%氯化钠注射液 5.30001.0    陶先明-1    瓶500ml
0000004745100040082581100390865 100016173 0.9%氯化钠注射液 5.30001.0    陶先明-1    瓶500ml
0000004746100040082681100390866 100016172 0.9%氯化钠注射液 5.30001.0    陶先明-1    瓶500ml
0000004747100040082781100390864 100016171 0.9%氯化钠注射液 5.30001.0    陶先明-1    瓶500ml
--------------------------------------------------------------------------------

可以使用bcp将原数据导出到临时文件,然后在用bcp导入到另外一个表中 测试SQL

--------------------------------------------------------------------------------
create database jinjazz_test

go

use jinjazz_test

go

--建立测试环境

set nocount on

create table test(日期varchar(20),参数varchar(200))

insert into test select '2008-10-1','0000004741|1000400821|81100390861|100016179|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|'

insert into test select '2008-10-1','0000004742|1000400822|81100390862|100016175|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|'

insert into test select '2008-10-1','0000004743|1000400823|81100390863|100016175|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|'

insert into test select '2008-10-1','0000004744|1000400824|81100390865|100016174|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|'

insert into test select '2008-10-1','0000004745|1000400825|81100390866|100016173|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|'

insert into test select '2008-10-1','0000004746|1000400826|81100390867|100016172|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|'

insert into test select '2008-10-1','0000004747|1000400827|81100390868|100016171|0.9%氯化钠注射液|5.3000|1.0|陶先明|-1|瓶|500ml|'

go

create table test1(登记号varchar(20),处方号varchar(20),单号varchar(20),流水号varchar(20),项目名称varchar(20),单价varchar(20),数量varchar(20),人员varchar(20),经办人varchar(20),单位varchar(20),规格varchar(20))

go



--测试

EXEC master..xp_cmdshell 'bcp "select left(参数,len(参数)-1) from jinjazz_test.dbo.test" queryoute:\DT.txt -c -S10.1.3.252 -Usa -Psqltest'

EXEC master..xp_cmdshell 'bcp "jinjazz_test.dbo.test1" in e:\DT.txt -c -S10.1.3.252 -Usa -Psqltest -t"|"'



select * from test1



go

use master

go

drop database jinjazz_test

/*

登记号               处方号               单号                  流水号               项目名称                单价                  数量                  人员                  经办人               单位                  规格

-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------

0000004741         1000400821         81100390861          100016179            0.9%氯化钠注射液          5.3000               1.0                  陶先明               -1                   瓶                   500ml

0000004742         1000400822         81100390862          100016175            0.9%氯化钠注射液          5.3000               1.0                  陶先明               -1                   瓶                   500ml

0000004743         1000400823         81100390863          100016175            0.9%氯化钠注射液          5.3000               1.0                  陶先明               -1                   瓶                   500ml

0000004744         1000400824         81100390865          100016174            0.9%氯化钠注射液          5.3000               1.0                  陶先明               -1                   瓶                   500ml

0000004745         1000400825         81100390866          100016173            0.9%氯化钠注射液          5.3000               1.0                  陶先明               -1                   瓶                   500ml

0000004746         1000400826         81100390867          100016172            0.9%氯化钠注射液          5.3000               1.0                  陶先明               -1                   瓶                   500ml

0000004747         1000400827         81100390868          100016171            0.9%氯化钠注射液          5.3000               1.0                  陶先明               -1                   瓶                   500ml



*/
页: [1]
查看完整版本: sqlserver使用bcp分解字符串