仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1026|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之利用DTS导进多个文件数据到SQL Server中...

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:32:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。server|数据
利用DTS导进多个文件数据到SQLServer中

在我们事情中,常常必要将保留在文件中的数据导进到SQLServe的表中。偶然大概必要同时从不异或不不异的文件目次中导进多个文件的数据到SQLServer中。这里我们将会商怎样利用批处置文件和DTS从一个特定的文件目次中,导进多个文件的数据到SQLServer中。

实验情况
  我们先创立全部实验的情况。创立文件目次“C:MyImport”,和三个文件a.csv、b.csv和c.csv,文件内容以下。同时,在SQLServer中创立一个表用来寄存导进的数据。
    C:MyImporta.csv
    1,MAK,A9411792711,3400.25
    2,Claire,A9411452711,24000.33
    3,Sam,A5611792711,1200.34
    4,Wright,A5611792711,1200.34
    5,Richard,G561d792755,1223.34
    6,Valarie,B5611792788,1240.32
    C:MyImport.csv
    11,Rubon,9671792711,400.14
    22,Mike,9418952711,4000.56
    39,Hsu,75611792511,1230.00
    C:MyImportc.csv
    69,Lucy,8411992710,305.11
    45,Grace,3413452713,246.52
    33,Saint,5461795716,1278.70
    
    CreateDatabaseBank
    Go
    UseBank
    go
    CreatetableAccount([ID]int,NameVarchar(100),
    AccountNovarchar(100),Balancemoney)
    Go
    Createtablelogtable(idintidentity(1,1),
  Statusvarchar(500),
  Importeddatedatetimedefaultgetdate())
    Go
    usemaster
    go
    sp_addloginimportuser,import,Bank
    go
    useBank
    go
    sp_adduserimportuser
    go
    sp_addrolememberdb_datareader,importuser
    go
    sp_addrolememberdb_datawriter,importuser
    go

  创键DTS
  1、在DTS中创立3个全局变量,FileName、ServerName和DatabaseName。
  
  
  2、创立TextFile(Source)和SQLServer毗连,并创立数据转换义务,以下图所示。
  
  3、设置数据转换的对应干系以下图。
  

  4、创立静态属性义务(dynamictasks):毗连InputFile中,设置Catalog的值为全局变量DatabaseName,DataSource的值为全局变量FileName;毗连SQLServer中,设置DataSource的值为全局变量ServerName。
  

  
  5、增添一个“乐成时”的事情流在静态属性义务和毗连InputFile之间。
  
  6、以下图那样,创立一个实行SQL义务,来保留数据导进的纪录。
  SQL为INSERTINTOLogTable(Status)VALUES(?)
  
  
  点击参数,来设置参数,设置参数1为全局变量FileName。

  
  7、增添一个“乐成时”的事情流在毗连SQLServer和实行SQL义务之间。
  
  8、将DTS包保留成布局化存储文件。你也能够保留在SQLServer中,但我们这里只会商保留成布局化存储文件的体例。
  

  创立批处置文件
 以下所示创立批处置文件C:MyImportImport.bat。
    REMType:BatchFile
    REMCreatedby:Digjim
    REMImportallcsvfilestoSQLServerusingDTS

    REMExportDIRlistingtoC:MyImportDirlist.txt
    dirc:MyImport*.csv/b>C:MyImportDirlist.txt

    REMExecuteDTSpackageforeveryfilenameintheDirlist.txt

    for/f"tokens=1,2,3"%%iin(C:MyImportDirlist.txt)do"C:ProgramFilesMicrosoftSQLServer80ToolsBinnDTSrun.exe"-F"c:myimportmyimportdts1.dts"-Uimportuser-PimportCA"ServerName"="DIGJIM"-A"FileName"="c:myimport\%%i"-A"DatabaseName"="Bank"

    REMRenameallthefileswith"old"assuffix
    renc:myimport*.csv*.oldcsv

  实行批处置文件
  当批处置文件被实行今后,他会在C:MyImport目次下发生一个DirList.txt的文件,这个文件会包括一切C:MyImport下扩大名为CSV的文件,这些文件名会和其他必需的参数一气传输给DTSrun.exe。在这个例子里,DirList.txt的内容以下:
    C:MyImportDirList.txt
    acsv
    b.csv
    c.csv
  注重,在批处置文件中,依据你本人的情形设置ServerName,FileName和DatabaseName参数。

  了局
  如今你能够往你的数据库看了局,
  批处置输出的数据:



1

MAK

A9411792711

3400.25

2

Claire

A9411452711

24000.33

3

Sam

A5611792711

1200.34

4

Wright

A5611792711

1200.34

5

Richard

G561d792755

1223.34

6

Valarie

B5611792788

1240.32

11

Rubon

9671792711

400.14

22

Mike

9418952711

4000.56

39

Hsu

75611792511

1230

69

Lucy

8411992710

305.11

45

Grace

3413452713

246.52

33

Saint

5461795716

1278.7


在logtable中纪录的Log。



1

c:myimporta.csv

2004-4-191:16

2

c:myimport.csv

2004-4-191:16

3

c:myimportc.csv

2004-4-191:16


假如你把DTS包存储在SQLServer中,批处置文件就如许写:
REMType:BatchFile
REMCreatedby:Digjim
REMImportallcsvfilestoSQLServerusingDTS

REMExportDIRlistingtoC:MyImportDirlist.txt
dirc:MyImport*.csv/b>C:MyImportDirlist.txt

REMExecuteDTSpackageforeveryfilenameintheDirlist.txt

for/f"tokens=1,2,3"%%iin(C:MyImportDirlist.txt)do"C:ProgramFilesMicrosoftSQLServer80ToolsBinnDTSrun.exe"CS"SQL"CN"myimportdts"-Uimportuser-PimportCA"ServerName"="DIGJIM"-A"FileName"="c:myimport\%%i"-A"DatabaseName"="Bank"

REMRenameallthefileswith"old"assuffix
renc:myimport*.csv*.oldcsv



参考:

利用T-SQL导进多个文件数据到SQLServer中
“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-19 16:17:32 | 只看该作者
但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
若天明 该用户已被删除
板凳
发表于 2015-1-26 07:11:10 | 只看该作者
我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力
莫相离 该用户已被删除
地板
发表于 2015-2-4 13:37:27 | 只看该作者
这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
柔情似水 该用户已被删除
5#
发表于 2015-2-10 00:14:41 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
再见西城 该用户已被删除
6#
发表于 2015-2-28 10:37:46 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
海妖 该用户已被删除
7#
发表于 2015-3-9 22:35:35 | 只看该作者
大侠们有推荐的书籍和学习方法写下吧。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-17 02:43:34 | 只看该作者
SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上.
乐观 该用户已被删除
9#
发表于 2015-3-23 17:53:01 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表