在网上找了个把word文件存在数据库中的存储过程,但在自己的机器上试验读入word文件时候并不成功,提示“'textcopy' 不是内部或外部命令,也不是可运行的程序或批处理文件。NULL”这个过程有什么问题吗?存储过程如下(根据实际情况自己做了修改):

my_yinger 2008-10-11 11:57:43
在网上找了个把word文件存在数据库中的存储过程,但在自己的机器上试验读入word文件时候并不成功,提示“'textcopy' 不是内部或外部命令,也不是可运行的程序或批处理文件。NULL”这个过程有什么问题吗?存储过程如下(根据实际情况自己做了修改):

------------------------------------------------------------------------------------------------
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
/*说明:
假设
数据服务器名字 CLBY-L
sa,用户密码:sa
数据库名字 zh_fx
数据表名字 test
字段编号 bh (int)
文件字段 wj (imger)
----------------------
读入word文件代码例子:
插入编号 insert test values(1,0x)
执行 sp_textcopy 'CLBY-L','sa','sa','zh_fx','test','wj','c:\wj.doc','where bh=1','I'
----------------------------------------------------------------------------------------
读出word文件代码例子:
执行 sp_textcopy 'CLBY-L','sa','sa','zh_fx','test','wj','d:\wj.doc','where bh=1','0'
*/
...全文
168 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
happychenj 2008-10-23
  • 打赏
  • 举报
回复
1:你是否有textcopy.exe这个工具,如果没有,去下载1个。
2:如果已经有,设置一个环境变量,指向textcopy.exe 所在的目录,然后再执行你的代码.
请问环境变量该怎么设呢
fcuandy 2008-10-12
  • 打赏
  • 举报
回复
再补充一点,text,image存放二进制数据。
fcuandy 2008-10-12
  • 打赏
  • 举报
回复
多说无益,看了就明白


DECLARE @a VARCHAR
SET @a='a'
SELECT @a,CAST(@a AS VARBINARY)
SELECT CAST(0x61 AS VARCHAR)
my_yinger 2008-10-12
  • 打赏
  • 举报
回复
谢谢大家,关于 ERROR: Text or image pointer and timestamp retrieval failed. 知道怎么回事了
是因为我没有执行原帖子中的 insert test values(1,0x),而是自己手工在表中家的一条记录,这样
imger字段就是null,所以出现了上面的问题。

不过
1、什么一定要插入0x才行?插入ox代表什么?

2、上面的其他的问题,还需要大家说下。

谢谢
fcuandy 2008-10-12
  • 打赏
  • 举报
回复
有一点需要注意,textcopy可能需要唯一定位到行。
即 where bh=1 能定位到唯一的一条记录, 也即表中bh应该是不能重复的。

这样,以表,行,列,sqlserver引擎才能确定文件要存放的地址。

如果bh=1的记录有两条以上,可能就会有问题。
my_yinger 2008-10-12
  • 打赏
  • 举报
回复
继续求助,

1、搜索发现C:\Program Files\Microsoft SQL Server\MSSQL\Binn目录下是有textcopy.exe文件的,哪么怎么还会有上面的提示?如何自己设置环境变量指出textcopy.exe所在的目录?

2、找到textcopy.exe文件后,继续试验上面的存储过程,读入后提示ERROR: Text or image pointer and timestamp retrieval failed. 这又是什么原因?那个地方写的不对?
fcuandy 2008-10-12
  • 打赏
  • 举报
回复
textcopy的功能是将text或image数据拷贝到指定服务器指定库的表的指定行的指定列。

参考以前的回贴
http://topic.csdn.net/t/20061114/15/5156983.html

http://topic.csdn.net/u/20071116/22/6c2e7f09-dccb-42e7-97a2-91e776de573f.html
fcuandy 2008-10-12
  • 打赏
  • 举报
回复
textcopy是sqlserver2000自带的命令行工具。
像bcp,osql,isql之类。

sql2005好像是不支持的,没有试过把textcopy拷到sql2005 90/binn/tools下能否正常运行。
CN_SQL 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 my_yinger 的回复:]
re : CN_SQL

哦,原来是还要需要个 textcopy.exe 这个工具 呀。谢谢了。再问下 textcopy.exe 这个工具是干啥的?
[/Quote]
你GOOGLE去下载的时候,软件说明里会有详细的描述,比我讲得清楚多了。
my_yinger 2008-10-12
  • 打赏
  • 举报
回复
re : CN_SQL

哦,原来是还要需要个 textcopy.exe 这个工具 呀。谢谢了。再问下 textcopy.exe 这个工具是干啥的?
CN_SQL 2008-10-12
  • 打赏
  • 举报
回复
1:你是否有textcopy.exe这个工具,如果没有,去下载1个。
2:如果已经有,设置一个环境变量,指向textcopy.exe 所在的目录,然后再执行你的代码.
my_yinger 2008-10-12
  • 打赏
  • 举报
回复
谢谢大家,问题解决了,不过还是似懂非懂的。呵呵。
-狙击手- 2008-10-12
  • 打赏
  • 举报
回复
...
fcuandy 2008-10-12
  • 打赏
  • 举报
回复
SELECT CAST(0x AS VARCHAR)

看到是什么了吗? 给列写入0x :

insert tb(id,textOrImageField) select 1,0x

insert tb(id) select 1
的区别就是
一个给textOrImageField列空串''
一个没有给写值,即为null

写空串什么意思? 给列分配文件地址。或者说给text或image列赋了指针或者句柄。

text,image列,只存放地址指针(或句柄,叫法不一定准确,你明白意思就行),长度是16, 由指针指向实际内容地址,指针值能过查看库文件可以看到,当然用 textptr函数也能得到。

跟前台程序中对变量定义和赋值一个道理:

MyClass myClass ;
MyClass myClass=new MyClass();

一个划分内存空间,一个不划分。
而上面这两句sql代码的区别不是内存地址,而是文件地址。
my_yinger 2008-10-12
  • 打赏
  • 举报
回复
蛤蟆跳井

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧