用T-SQL导入文件数据到SQLServer
时间:2007-12-23 来源:不详 作者:迈克DB
试验环境
我们先创建整个试验的环境。创建文件目录“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
上一篇:如何同时对多个表或列操作 下一篇:建立安全的MSSQLServer启动账号
文章评论
共有位Admini5网友发表了评论 查看完整内容