sql 二进制文件的导入导出

摘要:
/*--bcp二进制文件导入/导出支持image、text和ntext字段的导入/导出。图像适用于二进制文件;Text,ntext适用于文本数据文件。注意:导入时,将覆盖所有符合条件的行。导出时,所有符合条件的行也将导出到指定的文件。此存储过程仅在bcp中实现。邹健2003.08-------------*//*--调用示例--数据导出execp_binaryIO'zj','','','acc

/*--bcp-二进制文件的导入导出

支持image,text,ntext字段的导入/导出
image适合于二进制文件;text,ntext适合于文本数据文件

注意:导入时,将覆盖满足条件的所有行
导出时,将把所有满足条件的行也出到指定文件中

此存储过程仅用bcp实现
邹建   2003.08-----------------*/

/*--调用示例
--数据导出
exec   p_binaryIO   'zj','','','acc_演示数据..tb','img','c:\zj1.dat'

--数据导出
exec   p_binaryIO   'zj','','','acc_演示数据..tb','img','c:\zj1.dat','',0
--*/
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_binaryIO]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)
drop   procedure   [dbo].[p_binaryIO]
GO

Create   proc   p_binaryIO
@servename   varchar   (30),--服务器名称
@username   varchar   (30),   --用户名
@password   varchar   (30), --密码
@tbname   varchar   (500),   --数据库..表名
@fdname   varchar   (30),   --字段名
@fname   varchar   (1000), --目录+文件名,处理过程中要使用/覆盖:@filename+.bak
@tj   varchar   (1000)='',   --处理条件.对于数据导入,如果条件中包含@fdname,请指定表名前缀
@isout   bit=1 --1导出((默认),0导入
AS  
declare   @fname_in   varchar(1000) --bcp处理应答文件名
,@fsize   varchar(20) --要处理的文件的大小
,@m_tbname   varchar(50) --临时表名
,@sql   varchar(8000)

--则取得导入文件的大小
if   @isout=1  
set   @fsize='0'
else
begin
create   table   #tb(可选名   varchar(20),大小   int
,创建日期   varchar(10),创建时间   varchar(20)
,上次写操作日期   varchar(10),上次写操作时间   varchar(20)
,上次访问日期   varchar(10),上次访问时间   varchar(20),特性   int)
insert   into   #tb
exec   master..xp_getfiledetails   @fname
select   @fsize=大小   from   #tb
drop   table   #tb
if   @fsize   is   null
begin
print   '文件未找到'
return
end

end

--生成数据处理应答文件
set   @m_tbname='[##temp'+cast(newid()   as   varchar(40))+']'
set   @sql='select   *   into   '+@m_tbname+'   from(
select   null   as   类型
union   all   select   0   as   前缀
union   all   select   '+@fsize+'   as   长度
union   all   select   null   as   结束
union   all   select   null   as   格式
)   a'
exec(@sql)
select   @fname_in=@fname+'_temp'
,@sql='bcp   "'+@m_tbname+'"   out   "'+@fname_in
+'"   /S"'+@servename
+case   when   isnull(@username,'')=''   then   ''  
else   '"   /U"'+@username   end
+'"   /P"'+isnull(@password,'')+'"   /c'
exec   master..xp_cmdshell   @sql
--删除临时表
set   @sql='drop   table   '+@m_tbname
exec(@sql)

if   @isout=1
begin
set   @sql='bcp   "select   top   1   '+@fdname+'   from   '  
+@tbname+case   isnull(@tj,'')   when   ''   then   ''
else   '   where   '+@tj   end
+'"   queryout   "'+@fname
+'"   /S"'+@servename
+case   when   isnull(@username,'')=''   then   ''  
else   '"   /U"'+@username   end
+'"   /P"'+isnull(@password,'')
+'"   /i"'+@fname_in+'"'
exec   master..xp_cmdshell   @sql
end
else
begin
--为数据导入准备临时表
set   @sql='select   top   0   '+@fdname+'   into   '
+@m_tbname+'   from   '   +@tbname
exec(@sql)

--将数据导入到临时表
set   @sql='bcp   "'+@m_tbname+'"   in   "'+@fname
+'"   /S"'+@servename
+case   when   isnull(@username,'')=''   then   ''  
else   '"   /U"'+@username   end
+'"   /P"'+isnull(@password,'')
+'"   /i"'+@fname_in+'"'
exec   master..xp_cmdshell   @sql

--将数据导入到正式表中
set   @sql='update   '+@tbname
+'   set   '+@fdname+'=b.'+@fdname
+'   from   '+@tbname+'   a,'
+@m_tbname+'   b'
+case   isnull(@tj,'')   when   ''   then   ''
else   '   where   '+@tj   end
exec(@sql)

--删除数据处理临时表
set   @sql='drop   table   '+@m_tbname
end

--删除数据处理应答文件
set   @sql='del   '+@fname_in
exec   master..xp_cmdshell   @sql

go

免责声明:文章转载自《sql 二进制文件的导入导出》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java里的时间操作之LocalDate、LocalTime、LocalDateTimeJava中byte[]和char[]互相转换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle中的关键字

NVL和COALESCE的区别: nvl(COMMISSION_PCT,0)如果第一个参数为null,则返回第二个参数如果第一个参数为非null,则返回第一个参数 COALESCE(EXPR1,EXPR2,EXPR3...EXPRn)从左往右数,遇到第一个非null值,则返回该非null值。多层判断 第一点区别:从上面可以知道,nvl只适合于两个参数的,C...

SQL中的数字格式化 (收藏)

用sql语句来格式化double型的数据,比如,只取出小数点后面的两位一。主要方法--取小数位前数字,不考虑四舍五入select left('30000.72234', charindex('.', '30000.72234')-1)其中:charindex('.', '30000.72234')获得小数点的位置;-1则表示在小数点前面的全部,如果想获取小...

SQL Server 数据库安全相关(SQL语句)

-- 创建登陆用户 -- 语法: create login login_name from windows with default_database = database | default_language = language create login [localhost\hoojo-pc] from windows with default_d...

SQL Server 排序规则(摘)

3Sql Server数据库,在跨库多表连接查询时,若两数据库默认字符集不同,系统就会返回这样的错误:“无法解决equal to操作的排序规则冲突” 一、错误分析:这个错误是因为排序规则不一致造成的,比如:create table #t1(name varchar(20) collate Albanian_CI_AI_WS,  value int)cre...

爬虫结果数据完整性校验

数据完整性分为三个方面: 1、域完整性(列)   限制输入数据的类型,及范围,或者格式,如性别字段必须是“男”或者“女”,不允许其他数据插入,成绩字段只能是0-100的整型数据,email字段的内容必须符合邮箱的正则表达式 2、实体完整性(行)   要求表中的所有行都有一个唯一标识符。这个唯一标识符可能是一列,也可能是几列的组合,称为主键。也就是说,表中的...

MyBatis

为什么使用mybatis: 在知道为什么使用mybatis之前,我们先了解java如何进行jdbc访问数据库的。第一是从连接池取出或者自己创建Connection对象,第二是从Connection对象中创建出Statement对象,第三,根据Statement对象去执行SQL语句,第四,获取执行SQL语句的返回结果并处理,第五,关闭数据库。在这几个步骤中,...