|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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等。 |
|