MSSQL教程之利用DTS导进多个文件数据到SQL Server中...
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(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命令。 但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右) 我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力 这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。 原来公司用过MYSQL自己也只是建个表写个SQL varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。 大侠们有推荐的书籍和学习方法写下吧。 SQL语言是学习所有数据库产品的基础,无论你是做数据库管理还是做数据库开发都是这样。不过具体学习的侧重点要看你将来做哪一块,如果是做数据库管理(DBA),侧重点应该放在SQLServer的系统管理上. 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
页:
[1]