日期:2014-05-18  浏览次数:20441 次

关于SQL2005 数据类型及对类型操作的几个问题
现在做一个项目,要求把图片和附件(一般是 图片--JPG、附件--DOC格式)存入数据库中,可不可以全部用varbinary类型的字段来存储?比较图片和附件存在站点目录中和存在数据库中,哪个方式的效率高?
  若使用varbinary字段,我想把这个字段的数据存在数据库的副文件中,应该怎么做?用SQL语句可以实现吗?怎么实现?
  请各路高手帮忙解答下,谢谢。

------解决方案--------------------
image
------解决方案--------------------
ntext、text 和 image
用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度和可变长度数据类型。Unicode 数据使用 UNICODE UCS-2 字符集。

ntext

可变长度 Unicode 数据的最大长度为 230 - 1 (1,073,741,823) 个字符。存储大小是所输入字符个数的两倍(以字节为单位)。ntext 在 SQL-92 中的同义词是 national text。

text

服务器代码页中的可变长度非 Unicode 数据的最大长度为 231-1 (2,147,483,647) 个字符。当服务器代码页使用双字节字符时,存储量仍是 2,147,483,647 字节。存储大小可能小于 2,147,483,647 字节(取决于字符串)。

image

可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间。 

注释
下面的函数和语句可以与 ntext、text 或 image 数据一起使用。


------解决方案--------------------
用IMAGE类型,
不过最好是存储路径
------解决方案--------------------
探讨
      现在做一个项目,要求把图片和附件(一般是 图片--JPG、附件--DOC格式)存入数据库中,可不可以全部用varbinary类型的字段来存储?比较图片和附件存在站点目录中和存在数据库中,哪个方式的效率高?
      若使用varbinary字段,我想把这个字段的数据存在数据库的副文件中,应该怎么做?用SQL语句可以实现吗?怎么实现?
      请各路高手帮忙解答下,谢谢。

------解决方案--------------------
一般都是存储路径 然后进行调用比较方便
------解决方案--------------------
存储路径
至于你说的副本
友情帮顶
------解决方案--------------------
用存储路径吧
------解决方案--------------------
探讨
谢谢两位的回复,因为看到一些2005的新特性说,text,ntext,image字段将被取代,所以采用varbinary字段,那如果要把这个字段放在数据库副文件中,要怎么做?

------解决方案--------------------

create table ... TEXTIMAGE_ON filegroup 语句指定将表中的 varbinary(max) 类型数据存储在指定的文件组。
------解决方案--------------------
一般的数据库存路径,文件放在单独文件夹中。这样的优点是数据库备份管理容易。缺点是容易出现容易出项数据不一致。存数据库的话,数据库数据会很大,数据库管理会很不方便。
 
------解决方案--------------------
SQL code
--将图片存到数据库中
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)    -- 必须的,且不是null
insert 表名 values(2,0x)    -- 必须的,且不是null
go

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

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

go

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

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

************如果报textcopy不是可执行文件的话,你就到
C:\Program Files\Microsoft SQL Server\MSSQL\Binn
目录下拷备 textcopy.exe到:
C:\Program Files\Microsoft SQL Server\80\Tools\Binn