仓酷云

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

[学习教程] MSSQL教程之利用T-SQL导进多个文件数据到SQL Serve...

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:32:15 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这类操作的执行过程是,1)按照新的表定义建立一个临时表tmpa,2)将原表数据拷贝到临时表,3)将原始表改名tmpb,4)将tmpa改名为原表名,5)将tmpb删除。server|数据
利用T-SQL导进多个文件数据到SQLServer中

在我们的事情中,常常必要一连输出多个文件的数据到SQLServer的表中,偶然必要从不异大概分歧的目次中,同时将文件中的数据倒进。在这篇文章中,我们将会商怎样同时把一个目次中的文件的数据倒进到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
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),
Queryvarchar(1000),
Importeddatedatetimedefaultgetdate()
)

办法1:XP_CMDSHELL和BULKINSERT
这个办法利用xp_cmdshell和BulkInsert的SQL命令把一个目次中的文件倒进到SQLServer的表中。

创立存储历程

在数据库中发生这个存储历程,这个存储历程有三个参数:文件路径,文件扩大名和数据库的表名。

Createprocedureusp_ImportMultipleFiles@filepathvarchar(500),
@patternvarchar(100),@TableNamevarchar(128)
as
setquoted_identifieroff
declare@queryvarchar(1000)
declare@max1int
declare@count1int
Declare@filenamevarchar(100)
set@count1=0
createtable#x(namevarchar(200))
set@query=master.dbo.xp_cmdshell"dir+@filepath+@pattern+/b"
insert#xexec(@query)
deletefrom#xwherenameisNULL
selectidentity(int,1,1)asID,nameinto#yfrom#x
droptable#x
set@max1=(selectmax(ID)from#y)
--print@max1
--print@count1
While@count1<=@max1
begin
set@count1=@count1+1
set@filename=(selectnamefrom#ywhere[id]=@count1)
set@Query=BULKINSERT+@Tablename+FROM"+@Filepath+@Filename+"
WITH(FIELDTERMINATOR=",",ROWTERMINATOR="
")
--print@query
exec(@query)
insertintologtable(query)select@query
end

droptable#y

实行
实行下面的存储历程,参数以下:
例1:输出一切的c:myimport目次下的.csv文件到Account表中
Execusp_ImportMultipleFilesc:myimport,*.csv,Account

例2:输出一切的c:myimport目次下的文件到Account表中
Execusp_ImportMultipleFilesc:myimport,*.*,Account

办法2:XP_CMDSHELL和BCP公用程序
这个办法利用"xp_cmdshell"和"BCP.exe"倒进一个目次下的文件到SQLServer的表中。这个存储历程以服务器名、数据库名、文件路径、文件扩大名和数据库表名作为参数。
注重:确信你运转SQLServerAgent的帐户具有会见你输出的文件夹和服务器的权限。

创立存储历程:
setquoted_identifieroff
go
Createprocedureusp_ImportMultipleFilesBCP@servernamevarchar(128),
@DatabaseNamevarchar(128),@filepathvarchar(500),@patternvarchar(100),
@TableNamevarchar(128)
as
declare@queryvarchar(1000)
declare@max1int
declare@count1int
Declare@filenamevarchar(100)
set@count1=0
createtable#x(namevarchar(200))
set@query=master.dbo.xp_cmdshell"dir+@filepath+@pattern+/b"
insert#xexec(@query)
deletefrom#xwherenameisNULL
selectidentity(int,1,1)asID,nameinto#yfrom#x
droptable#x
set@max1=(selectmax(ID)from#y)
--print@max1
--print@count1
--select*from#y
While@count1<=@max1
begin
set@count1=@count1+1
set@filename=(selectnamefrom#ywhere[id]=@count1)
set@Query=bcp"+@databasename+.dbo.+@Tablename+"
in"+@Filepath+@Filename+"-S+@servername+-T-c-r
-t,
set@Query=MASTER.DBO.xp_cmdshell+""+@query+""
--print@query
EXEC(@query)
insertintologtable(query)select@query
end

droptable#y

实行
实行下面的存储历程,参数以下:
例1:输出一切的c:myimport目次下的.csv文件到Account表中
Execusp_ImportMultipleFilesBCPSQL,Bank,c:Myimport,*.csv,Account

例2:输出一切的c:myimport目次下的文件到Account表中
Execusp_ImportMultipleFilesBCPSQL,Bank,c:Myimport,*.*,Account

了局
不论你利用办法一仍是办法二,数据将会被导进到SQLServer的表中。以下所示:


1

MAK

A9411792711

3400.25

2

Claire

A9411452711

24000.33

3

Sam

A5611792711

1200.34

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


利用办法一发生的日记纪录以下表:



1

BULKINSERTAccountFROM"c:myimporta.csv"WITH(FIELDTERMINATOR=",",ROWTERMINATOR="
")

3/1/042:15

2

BULKINSERTAccountFROM"c:myimport.csv"WITH(FIELDTERMINATOR=",",ROWTERMINATOR="
")

3/1/042:15

3

BULKINSERTAccountFROM"c:myimportc.csv"WITH(FIELDTERMINATOR=",",ROWTERMINATOR="
")

3/1/042:15


利用办法二发生的日记纪录以下表:


1

MASTER.DBO.xp_cmdshellbcp"Bank.dbo.Account"in"c:Myimporta.csv"-SSQL-T-c-r
-t,

3/1/042:18

2

MASTER.DBO.xp_cmdshellbcp"Bank.dbo.Account"in"c:Myimport.csv"-SSQL-T-c-r
-t,

3/1/042:18

3

MASTER.DBO.xp_cmdshellbcp"Bank.dbo.Account"in"c:Myimportc.csv"-SSQL-T-c-r
-t,

3/1/042:18


总结
像后面提到的一样,这篇文章的目标是告知你怎样从一个文件夹中导进多个文件到SQLServer的表中。这些存储历程能够进一步加强,能够用xp_getfiledetails来判别转进的文件的最初修正工夫来断定文件的局限。这些存储历程也能够创立为准时实行的功课。在导进完成今后,你能够用rename或move命令来重定名大概移到分歧的目次中。

参考:

利用DTS导进多个文件数据到SQLServer中
为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-9 15:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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