求助:sqlserver 中的IMAGE字段类型 对应的dbf(vpf)是什么类型

浪客剑芯 2017-09-25 04:06:39
求助:sqlserver 中的IMAGE字段类型 对应的dbf(vpf)是什么类型
...全文
230 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
OwenZeng_DBA 2017-09-25
  • 打赏
  • 举报
回复
引用 5 楼 qq_Dai 的回复:
@z10843087 还是不行,大神求助
Memo (binary) 这个类型呢,,这个太老了,,
OwenZeng_DBA 2017-09-25
  • 打赏
  • 举报
回复
引用 3 楼 qq_Dai 的回复:
项目需要,当前项目是直接存到阿里云上面的,我现在要取下来拉伸并且转成image存到了sqlserver数据库中,因另一个项目数据库太老(vpf),所以需要转成dbf,转的过程中,image无法转换,求助! 详细如下,请求支援: --1、--如何启用OLE Automation Procedures。 sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ole Automation Procedures', 1; GO RECONFIGURE; GO --2、--开启导入功能 exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure --允许在进程中使用ACE.OLEDB.12 EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 --允许动态参数 EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 --3、64位安装 AccessDatabaseEngine_X64 reconfigure go sp_configure 'xp_cmdshell',1 reconfigure go alter PROC p_exporttb22 -- @tbname sysname , --要导出的表名 @path NVARCHAR(1000) , --文件存放目录--绝对地址要是服务器上的位置,并且要避开根目录,数据保存在服务器上。 @fname NVARCHAR(250) = '' , --文件名,默认为表名 @over BIT = 0 --是否覆盖已经存在的文件,如果不覆盖,则直接追加 AS DECLARE @err INT , @src NVARCHAR(255) , @desc NVARCHAR(255) , @out INT DECLARE @obj INT , @constr NVARCHAR(1000) , @sql VARCHAR(8000) , @fdlist VARCHAR(8000), @fdlistUpper VARCHAR(8000) --insert dbf文件时 字段要大写,故提前准备 --参数检测 IF ISNULL(@fname, '') = '' SET @fname = @tbname + '.dbf' --检查文件是否已经存在 IF RIGHT(@path, 1) <> '/' SET @path = @path + '/' CREATE TABLE #tb ( a BIT, b BIT, c BIT ) SET @sql = @path + @fname INSERT INTO #tb EXEC master..xp_fileexist @sql IF EXISTS ( SELECT 1 FROM #tb WHERE a = 1 ) IF @over = 1 BEGIN SET @sql = 'del ' + @sql EXEC master..xp_cmdshell @sql, no_output END ELSE SET @over = 0 ELSE SET @over = 1 --数据库创建语句 SET @sql = @path + @fname SET @constr = 'Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties="dBASE 5.0;' --如果不是64位系统,就不能用“Microsoft.ACE.OLEDB.12.0”,改为"Microsoft.Jet.OLEDB.4.0",未测试32的情况, --下同。具体细节可以参考:http://www.connectionstrings.com/dbf-foxpro/ + ';HDR=NO;DATABASE=' + @path + '"' --连接数据库 EXEC @err= sp_OACreate 'adodb.connection', @obj OUT --sp_OACreate IF @err <> 0 GOTO lberr EXEC @err= sp_OAMethod @obj, 'open', NULL, @constr IF @err <> 0 GOTO lberr --创建表的SQL SELECT @sql = '' , @fdlist = '' SELECT @fdlist = @fdlist + ',' + a.name , @sql = @sql + ',[' + a.name + '] ' + CASE WHEN b.name IN ( 'char', 'nchar', 'varchar', 'nvarchar' ) THEN 'text(' + CAST(CASE WHEN a.length > 250 THEN 250 ELSE a.length END AS VARCHAR) + ')' WHEN b.name IN ( 'tynyint', 'int', 'bigint', 'tinyint' ) THEN 'int' WHEN b.name IN ( 'smalldatetime', 'datetime' ) THEN 'datetime' WHEN b.name IN ( 'money', 'smallmoney' ) THEN 'money' WHEN b.name IN ( 'image' ) THEN 'GENERAL' ELSE b.name END FROM syscolumns a LEFT JOIN systypes b ON a.xtype = b.xusertype WHERE b.name NOT IN ( --'image', 'text', 'uniqueidentifier', 'sql_variant', 'ntext', 'varbinary', 'binary', 'timestamp' ) AND OBJECT_ID(@tbname) = id SELECT @sql = 'create table [' + @fname + '](' + SUBSTRING(@sql, 2, 8000) + ')' , @fdlist = SUBSTRING(@fdlist, 2, 8000) IF @over = 1 BEGIN EXEC @err= sp_OAMethod @obj, 'execute', @out OUT, @sql IF @err <> 0 GOTO lberr END EXEC @err= sp_OADestroy @obj SET @sql = 'openrowset(''Microsoft.ACE.OLEDB.12.0'',''dBase 5.0;DATABASE=' + @path + ''',''select * from [' + @fname + ']'')' SET @fdlistUpper=UPPER(@fdlist) --insert dbf文件时 字段要大写,故提前准备 --导入数据 --EXEC('insert into '+@sql+'('+@fdlist+' ) select '+@fdlist+' from '+@tbname ) EXEC('insert into '+@sql+'('+@fdlistUpper+' ) select '+@fdlist+' from '+@tbname ) RETURN lberr: EXEC sp_OAGetErrorInfo 0, @src OUT, @desc OUT lbexit: SELECT CAST(@err AS VARBINARY(4)) AS 错误号 , @src AS 错误源 , @desc AS 错误描述 SELECT @sql , @constr , @fdlist GO -- p_exporttb22 @tbname='TMohrssCertInfo',@path='H:\db_BAK',@over=0 --绝对地址要是服务器上的位置,并且要避开根目录,数据保存在服务器上。
用我说的那个类型试试
OwenZeng_DBA 2017-09-25
  • 打赏
  • 举报
回复
试试 OLEOBJECT ,如果不行的话,应该就没有这种类型
浪客剑芯 2017-09-25
  • 打赏
  • 举报
回复
@z10843087

还是不行,大神求助
浪客剑芯 2017-09-25
  • 打赏
  • 举报
回复
项目需要,当前项目是直接存到阿里云上面的,我现在要取下来拉伸并且转成image存到了sqlserver数据库中,因另一个项目数据库太老(vpf),所以需要转成dbf,转的过程中,image无法转换,求助!


详细如下,请求支援:



--1、--如何启用OLE Automation Procedures。

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO

--2、--开启导入功能
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
--允许在进程中使用ACE.OLEDB.12
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
--允许动态参数
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
--3、64位安装 AccessDatabaseEngine_X64

reconfigure
go
sp_configure 'xp_cmdshell',1
reconfigure
go


alter PROC p_exporttb22 --
@tbname sysname , --要导出的表名
@path NVARCHAR(1000) , --文件存放目录--绝对地址要是服务器上的位置,并且要避开根目录,数据保存在服务器上。
@fname NVARCHAR(250) = '' , --文件名,默认为表名
@over BIT = 0 --是否覆盖已经存在的文件,如果不覆盖,则直接追加
AS
DECLARE @err INT ,
@src NVARCHAR(255) ,
@desc NVARCHAR(255) ,
@out INT
DECLARE @obj INT ,
@constr NVARCHAR(1000) ,
@sql VARCHAR(8000) ,
@fdlist VARCHAR(8000),
@fdlistUpper VARCHAR(8000) --insert dbf文件时 字段要大写,故提前准备
--参数检测
IF ISNULL(@fname, '') = ''
SET @fname = @tbname + '.dbf'
--检查文件是否已经存在
IF RIGHT(@path, 1) <> '/'
SET @path = @path + '/'
CREATE TABLE #tb ( a BIT, b BIT, c BIT )
SET @sql = @path + @fname
INSERT INTO #tb
EXEC master..xp_fileexist @sql
IF EXISTS ( SELECT 1
FROM #tb
WHERE a = 1 )
IF @over = 1
BEGIN
SET @sql = 'del ' + @sql
EXEC master..xp_cmdshell @sql, no_output
END
ELSE
SET @over = 0
ELSE
SET @over = 1
--数据库创建语句
SET @sql = @path + @fname
SET @constr = 'Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties="dBASE 5.0;'
--如果不是64位系统,就不能用“Microsoft.ACE.OLEDB.12.0”,改为"Microsoft.Jet.OLEDB.4.0",未测试32的情况,
--下同。具体细节可以参考:http://www.connectionstrings.com/dbf-foxpro/
+ ';HDR=NO;DATABASE=' + @path + '"'
--连接数据库
EXEC @err= sp_OACreate 'adodb.connection', @obj OUT --sp_OACreate
IF @err <> 0
GOTO lberr
EXEC @err= sp_OAMethod @obj, 'open', NULL, @constr
IF @err <> 0
GOTO lberr
--创建表的SQL
SELECT @sql = '' ,
@fdlist = ''
SELECT @fdlist = @fdlist + ',' + a.name ,
@sql = @sql + ',[' + a.name + '] '
+ CASE WHEN b.name IN ( 'char', 'nchar', 'varchar', 'nvarchar' )
THEN 'text(' + CAST(CASE WHEN a.length > 250 THEN 250
ELSE a.length
END AS VARCHAR) + ')'
WHEN b.name IN ( 'tynyint', 'int', 'bigint', 'tinyint' )
THEN 'int'
WHEN b.name IN ( 'smalldatetime', 'datetime' )
THEN 'datetime'
WHEN b.name IN ( 'money', 'smallmoney' ) THEN 'money'
WHEN b.name IN ( 'image' ) THEN 'GENERAL'
ELSE b.name
END
FROM syscolumns a
LEFT JOIN systypes b ON a.xtype = b.xusertype
WHERE b.name NOT IN (
--'image',
'text', 'uniqueidentifier', 'sql_variant',
'ntext', 'varbinary', 'binary', 'timestamp' )
AND OBJECT_ID(@tbname) = id
SELECT @sql = 'create table [' + @fname + '](' + SUBSTRING(@sql, 2, 8000)
+ ')' ,
@fdlist = SUBSTRING(@fdlist, 2, 8000)
IF @over = 1
BEGIN
EXEC @err= sp_OAMethod @obj, 'execute', @out OUT, @sql
IF @err <> 0
GOTO lberr
END
EXEC @err= sp_OADestroy @obj
SET @sql = 'openrowset(''Microsoft.ACE.OLEDB.12.0'',''dBase 5.0;DATABASE='
+ @path + ''',''select * from [' + @fname + ']'')'

SET @fdlistUpper=UPPER(@fdlist) --insert dbf文件时 字段要大写,故提前准备

--导入数据
--EXEC('insert into '+@sql+'('+@fdlist+' ) select '+@fdlist+' from '+@tbname )
EXEC('insert into '+@sql+'('+@fdlistUpper+' ) select '+@fdlist+' from '+@tbname )
RETURN
lberr:
EXEC sp_OAGetErrorInfo 0, @src OUT, @desc OUT
lbexit:
SELECT CAST(@err AS VARBINARY(4)) AS 错误号 ,
@src AS 错误源 ,
@desc AS 错误描述
SELECT @sql ,
@constr ,
@fdlist
GO


--
p_exporttb22 @tbname='TMohrssCertInfo',@path='H:\db_BAK',@over=0 --绝对地址要是服务器上的位置,并且要避开根目录,数据保存在服务器上。


二月十六 2017-09-25
  • 打赏
  • 举报
回复
一般不把图片存到数据库中,都是在数据库中存储图片地址。

22,209

社区成员

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

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