This Domain(Admin5.com) is for Sale:

用T-SQL导入文件数据到SQLServer

时间:2007-12-23  来源:不详  作者:迈克DB
在我们的工作中,经常需要连续输入多个文件的数据到SQLServer的表中,有时需要从相同或者不同的目录中,同时将文件中的数据倒入。在这篇文章中,我们将讨论如何同时把一个目录中的文件的数据倒入到SQLServer中。
试验环境
我们先创建整个试验的环境。创建文件目录“C:\MyImport”,和三个文件a.csv、b.csv和c.csv,文件内容如下。同时,在SQLServer中创建一个表用来存放导入的数据。
C:\MyImport\a.csv
1,MAK,A9411792711,3400.25
2,Claire,A9411452711,24000.33
3,Sam,A5611792711,1200.34
C:\MyImport\b.csv
11,Rubon,9671792711,400.14
22,Mike,9418952711,4000.56
39,Hsu,75611792511,1230.00
C:\MyImport\c.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_ImportMultipleFiles’c:\myimport\’,’*.csv’,’Account’

例2:输入所有的c:\myimport目录下的文件到Account表中
Execusp_ImportMultipleFiles’c:\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

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息