SQL Server:动态地将图像插入表中

时间:2014-07-31 20:09:14

标签: sql sql-server

我有一个SQL Server表Products,我想根据产品代码在图像列中插入每个图像,其中图像名称与产品相同的代码

UPDATE Products
   SET ProdImage = (SELECT * FROM Openrowset
   ( Bulk 'C:\Users\DELL\Desktop\ImageCatalog\sbrk.jpg' , Single_Blob)
     as image)
 WHERE CODE = 'sbrk'
GO

当我尝试使路径动态化时,图像的名称和代码sbrk我得到了异常:

  

期待STRING,TEXT_LEX

2 个答案:

答案 0 :(得分:1)

我相信要使路径动态,您将需要使用动态SQL。您不能只将参数传入BULK语句:

DECLARE @sql NVARCHAR(MAX)
DECLARE @Path NVARCHAR(MAX)
DECLARE @Code NVARCHAR(200)

SET @Path = 'C:\Users\DELL\Desktop\ImageCatalog\sbrk.jpg' 
SET @Code = 'sbrk'

SET @sql = '
UPDATE Products
   SET ProdImage = (SELECT * FROM Openrowset
   ( Bulk N''' + @Path + ''' , Single_Blob)
     as image)
 WHERE CODE = ''' + @Code + ''''

EXEC sp_executesql @sql

<强>更新

Turboc说得对(没有代表评论)。我错过了关于图像文件名与代码相同的部分:

    DECLARE @sql NVARCHAR(MAX)
    DECLARE @Path NVARCHAR(MAX)
    DECLARE @Code NVARCHAR(200)

    SET @Path = 'C:\Users\DELL\Desktop\ImageCatalog\' 
    SET @Code = 'sbrk'

    SET @sql = '
    UPDATE Products
   SET ProdImage = (SELECT * FROM Openrowset
   ( Bulk N''' + @Path +  @Code + '.jpg'' , Single_Blob)
     as image)
 WHERE CODE = ''' + @Code + ''''

 EXEC sp_executesql @sql

答案 1 :(得分:1)

我认为darksolace给出的@Path语句可能需要修改才能在最后取出code.jpg。

SET @Path = 'C:\Users\DELL\Desktop\ImageCatalog\' 

然后修改update语句以将代码和.jpg附加到批量子查询。我现在没有和我一起使用sql,所以''''s可能会有点偏差。

UPDATE Products
   SET ProdImage = (SELECT * FROM Openrowset
   ( Bulk N''' + @Path + @Code + '.jpg''' , Single_Blob)
     as image)
 WHERE CODE = ''' + @Code + ''''

但我认为,推荐使用darksolace会让你非常接近。