T_SQL存储过程读写图片,文件等(BLOB)字段
来源:互联网 发布:网络的坏处例子 编辑:程序博客网 时间:2024/05/24 03:44
问题:
今天遇到一个问题:就是如何应用T_SQL语句把这样的字段写入到数据库表中,在csdn中搜索到了方法,同时又思考了原因,这里就写下来,省的下次忘掉。
SQL联机丛书中说的语法格式是:
'command_string'
是在操作系统命令行解释器上执行的命令字符串。command_string 的数据类型为 varchar(255) 或 nvarchar(4000),没有默认值。command_string 不能包含一对以上的双引号。如果由 command_string 引用的文件路径或程序名称中有空格,则需要使用一对引号。如果使用嵌入空格不方便,可考虑使用 FAT 8.3 文件名作为解决办法。
至于textcopy,查询联机丛书好像有这个存储过程:所以不知道它得格式建立是不是必须像上面写的那样,不过我试了试把login和password去掉的时候就报错了,所以可能是固定的格式:它的各个参数的含义如下:
@srvname 服务器的名字,本机的话写成'.'就可以了
@login 登陆用户名 'sa'
@password 密码
@dbname 数据库名
@tbname 表名
@colname image字段的列名
@filename 图片的路径
@whereclause 'where 编号=1 '
@direction 是读入还是从数据库读出
这里写下一个过程为:
insert into pub_infor values('1234',0x,'this is a sample')
然后读入图片:
sp_textcopy @srvname = '.',
@login = 'sa',
@password = 'sa',
@dbname = 'pubs',
@tbname = 'pub_info',
@colname = 'logo',
@filename = 'c:/picture.bmp',
@whereclause = " WHERE pub_id='1234' ",
@direction = 'I'
读出为:
sp_textcopy @srvname = '.',
@login = 'sa',
@password = 'sa',
@dbname = 'pubs',
@tbname = 'pub_info',
@colname = 'logo',
@filename = 'D:/picture.bmp',
@whereclause = " WHERE pub_id='1234' ",
@direction = 'O'
清空:update 表 set 列=null
最后注意事项:因为filename的字符长度只有30个:即:
@filename varchar (30),
所以实际应用的时候最好改为255个,当含有比较长的路径的时候就会报错:
ERROR: Augment 'xxx' unrecognize
还有参数的长度@exec_str varchar (255)也修改下比较好:
我改成了这样子:
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (255),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (400)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str
就只这样子了,感觉上T_SQL编程还是挺强大的,有时间应该好好学习下。
回答:
这里以SQL_server2000中的pubs数据库中的pub_info表为例来说说其中的过程:pub_info表包含:pub_id,logo,pr_info,其中logo属于image超长字段,应用存储过程奖图像存储在数据库的步骤包括:
1:首先:是插入一个列:
比如:insert into pub_infor values('1234',0x,'this is a sample')其中0x只是为了确保image字段不能为空:因为下面的存储过程:textcopy
用textcopy把图片或者文件拷贝到image类型字段之前,image类型的字段不能为空。先插入0x(或者0x0)到这个字段,然后就可以用textcopy了。
否则就会报这样的错误:
ERROR: Text or image pointer and timestamp retrieval failed.
2:接下来建立存储过程:
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str
说明:
其中xp_cmdshell:
以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行方式返回任何输出。授予非管理用户执行 xp_cmdshell 的权限。我自己的理解是:
textcopy就像是一个dos命令:就是说实际的文件copy命令是类似操作系统执行的。
xp_cmdshell
{'command_string'
} [, no_output
]
- T_SQL存储过程读写图片,文件等(BLOB)字段
- T_SQL存储过程读写图片,文件等(BLOB)字段
- 数据库中的BLOB字段--存图片等文件
- Oracle blob字段类型 文件读写实例
- 写入到blob字段的存储过程
- 更新blob字段的存储过程
- Oracle 11g PL/SQL程序块,存储图片等BLOB字段类型的列PL/
- mysql blob字段存储图片操作示例
- php 存储文件到oracle blob 字段
- FME综合应用之一:oracle数据库blob字段写入和写出图片或文件等
- T_SQL语句创建存储过程
- 利用sql将存储在 oracle blob中的图片等文件写出
- Delphi 实现文件从Oralce数据库 Blob 字段的读写
- Oracle Blob读写过程
- blob 字段图片处理
- Tstream用来读写blob字段
- AE中读写Blob字段
- SQLITE3 读写二进制字段blob
- PING命令实现及知识
- STL------通用工具
- delphi的一些扩展语法
- sql server中如何隐藏【系统表】
- Js 分栏
- T_SQL存储过程读写图片,文件等(BLOB)字段
- SQLSERVER备份和还原
- 北京···
- 海量数据处理--题目
- 浅谈MS-SQL锁机制
- Linux命令整理
- 双绞线接法简介
- Hibernate学习笔记:每个具体的类一张表
- VIM 手势图