|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
支持多线程,充分利用CPU资源数据|数据库
SQL数据库顶用image来存储文件,但SQL没有供应间接的存取文件的命令.
/*--bcp完成二进制文件的导进导出
撑持image,text,ntext字段的导进/导出
image合适于二进制文件,包含:Word文档,Excel文档,图片,音乐等
text,ntext合适于文本数据文件
注重:导进时,将掩盖满意前提的一切行
导出时,将把一切满意前提的行导出到指定文件中
此存储历程仅用bcp完成
-----------------*/
/*--挪用示例
--数据导出
execp_binaryIOzj,,,acc_演示数据..tb,img,c:zj1.dat
--数据导进
execp_binaryIOzj,,,acc_演示数据..tb,img,c:zj1.dat,,0
--*/
ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[p_binaryIO])andOBJECTPROPERTY(id,NIsProcedure)=1)
dropprocedure[dbo].[p_binaryIO]
GO
Createprocp_binaryIO
@servenamevarchar(30),--服务器称号
@usernamevarchar(30),--用户名
@passwordvarchar(30),--暗码
@tbnamevarchar(500),--数据库..表名
@fdnamevarchar(30),--字段名
@fnamevarchar(1000),--目次+文件名,处置过程当中要利用/掩盖:@filename+_temp
@tjvarchar(1000)=,--处置前提.关于数据导进,假如前提中包括@fdname,请指定表名前缀
@isoutbit=1--1导出((默许),0导进
AS
declare@fname_invarchar(1000)--bcp处置应对文件名
,@fsizevarchar(20)--要处置的文件的巨细
,@m_tbnamevarchar(50)--一时表名
,@sqlvarchar(8000)
--则获得导进文件的巨细
if@isout=1
set@fsize=0
else
begin
createtable#tb(可选名varchar(20),巨细int
,创立日期varchar(10),创立工夫varchar(20)
,前次写操纵日期varchar(10),前次写操纵工夫varchar(20)
,前次会见日期varchar(10),前次会见工夫varchar(20),特征int)
insertinto#tb
execmaster..xp_getfiledetails@fname
select@fsize=巨细from#tb
droptable#tb
if@fsizeisnull
begin
print文件未找到
return
end
end
--天生数据处置应对文件
set@m_tbname=[##temp+cast(newid()asvarchar(40))+]
set@sql=select*into+@m_tbname+from(
selectnullas范例
unionallselect0as前缀
unionallselect+@fsize+as长度
unionallselectnullas停止
unionallselectnullas格局
)a
exec(@sql)
select@fname_in=@fname+_temp
,@sql=bcp"+@m_tbname+"out"+@fname_in
+"/S"+@servename
+casewhenisnull(@username,)=then
else"/U"+@usernameend
+"/P"+isnull(@password,)+"/c
execmaster..xp_cmdshell@sql
--删除一时表
set@sql=droptable+@m_tbname
exec(@sql)
if@isout=1
begin
set@sql=bcp"selecttop1+@fdname+from
+@tbname+caseisnull(@tj,)whenthen
elsewhere+@tjend
+"queryout"+@fname
+"/S"+@servename
+casewhenisnull(@username,)=then
else"/U"+@usernameend
+"/P"+isnull(@password,)
+"/i"+@fname_in+"
execmaster..xp_cmdshell@sql
end
else
begin
--为数据导进筹办一时表
set@sql=selecttop0+@fdname+into
+@m_tbname+from+@tbname
exec(@sql)
--将数据导进光临时表
set@sql=bcp"+@m_tbname+"in"+@fname
+"/S"+@servename
+casewhenisnull(@username,)=then
else"/U"+@usernameend
+"/P"+isnull(@password,)
+"/i"+@fname_in+"
execmaster..xp_cmdshell@sql
--将数据导进到正式表中
set@sql=update+@tbname
+set+@fdname+=b.+@fdname
+from+@tbname+a,
+@m_tbname+b
+caseisnull(@tj,)whenthen
elsewhere+@tjend
exec(@sql)
--删除数据处置一时表
set@sql=droptable+@m_tbname
end
--删除数据处置应对文件
set@sql=del+@fname_in
execmaster..xp_cmdshell@sql
go
出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。 |
|