关于textcopy在sql server2005中的使用

wenti1976 2009-03-27 04:31:21
问下我在sql 2005执行一个过程:1、建立过程
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

2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x)
insert 表名 values(2,0x)
go

3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.jpg','where 编号=1','I' --注意条件是 编号=1

sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2

go

4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.jpg','where 编号=1','O' --注意条件是 编号=1

sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2

假如报textcopy不是可执行文档的话,您就到

  C:\Program Files\Microsoft SQL Server\MSSQL\Binn

  目录下拷备 textcopy.exe到:

  C:\Program Files\Microsoft SQL Server\80\Tools\Binn
报错:sg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。
这个怎样解决?在sql 2000中正常,是不是sql 2005不支持textcopy,因为我没看到这个工具在sql 2005中!要是不支持,应该怎样解决?
...全文
194 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ai_li7758521 2009-03-27
  • 打赏
  • 举报
回复
我上面的代码是2000升级到2005中用的,这里直接插入(OPENROWSET...BULK ):

create table 表名 (编号 int,image列名 image)
go

INSERT INTO dbo.MyTable (编号,image列名)
SELECT '1' AS 编号,
* FROM OPENROWSET(BULK N'照片.jpg', SINGLE_BLOB) AS image列名
go
claro 2009-03-27
  • 打赏
  • 举报
回复
帮顶。
ai_li7758521 2009-03-27
  • 打赏
  • 举报
回复
SQL2005中没有textcopy.exe

替代方法:利用OPENROWSET...BULK 插入blob类型的数据,然后更新你的主表。

CREATE PROC dbo.UpdateMyTableImageData
@MyPK int,
@FileName varchar(255)
AS
begin
DECLARE @SqlStatement nvarchar(MAX)
CREATE TABLE #BlobData(BlobData varbinary(max))

--insert blob into temp table

SET @SqlStatement =
N'INSERT INTO #BlobData SELECT BlobData.* FROM OPENROWSET (BULK '''
+ @FileName + ''',SINGLE_BLOB) BlobData'
EXEC sp_executesql @SqlStatement

--update main table with blob data

UPDATE dbo.MyTable
SET MyBlob = (SELECT BlobData FROM #BlobData)
WHERE MyTable.MyPK = @MyPK
DROP TABLE #BlobData
end
GO

htl258_Tony 2009-03-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 roy_88 的回复:]
SQL codeUSE AdventureWorks
GO
CREATE TABLE myTable(FileName nvarchar(60),
FileType nvarchar(60), photo varbinary(max))
GO

INSERT INTO myTable(FileName, FileType, photo )
SELECT 'photo.jpg' AS FileName,
'.jpg' AS FileType,
* FROM OPENROWSET(BULK N'photo.jpg', SINGLE_BLOB) AS photo
[/Quote]up roy
中国风 2009-03-27
  • 打赏
  • 举报
回复
USE AdventureWorks
GO
CREATE TABLE myTable(FileName nvarchar(60),
FileType nvarchar(60), photo varbinary(max))
GO

INSERT INTO myTable(FileName, FileType, photo )
SELECT 'photo.jpg' AS FileName,
'.jpg' AS FileType,
* FROM OPENROWSET(BULK N'photo.jpg', SINGLE_BLOB) AS photo
中国风 2009-03-27
  • 打赏
  • 举报
回复

2005里面没有textcopy了
可直接操作openrowset


jlj84237485 2009-03-27
  • 打赏
  • 举报
回复
帮顶一下
dawugui 2009-03-27
  • 打赏
  • 举报
回复
2005里面没有textcopy.

在帮助中没找到.
wenti1976 2009-03-27
  • 打赏
  • 举报
回复
我试了下sp_configure 'show advanced options',1
reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go
是不报错了,但还是导入不了图片!是不是sql 2005不支持textcopy,因为我没看到这个工具在sql 2005中!要是不支持,应该怎样解决?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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