T_SQL存储过程读写图片,文件等(BLOB)字段
2010-07-01 11:08
591 查看
问题:
今天遇到一个问题:就是如何应用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命令是类似操作系统执行的。
今天遇到一个问题:就是如何应用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)字段
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 利用sql将存储在 oracle blob中的图片等文件写出
- Oracle 11g PL/SQL程序块,存储图片等BLOB字段类型的列PL/
- 将mater库中的系统存储过程批量生成*.sql文件--通用且非常实用
- 用oracle的java存储过程实现BLOB字段的字符串读取
- sql导出dbf文件存储过程
- sql 可按任意字段排序的分页存储过程(转)
- MySQL新增字段、修改字段位置和查询存储过程的SQL代码
- SQL获取字段html代码中的img标签图片文件的路径
- 补充:用Ms SQL Server 存储过程操作DBF文件
- SQL存储过程之获取“,”分隔的字段
- SQL存储过程之删除指定表中指定字段所有约束
- sql导出dbf文件存储过程
- 用oracle的java存储过程实现BLOB字段的字符串读取
- 更新blob字段的存储过程--转自XINFEI0803的博客
- fileupload上传文件存储到oracle Blob字段中
- 通过SQL存储过程删除过期的数据库Bak备份文件或其它文件
- Delphi 实现文件从Oralce数据库 Blob 字段的读写
- 用oracle的java存储过程实现BLOB字段的字符串读取