【问题标题】:Dynamic SQL to load images from a directory从目录加载图像的动态 SQL
【发布时间】:2010-11-09 12:08:03
【问题描述】:

对此很陌生,而且非常卡!我正在尝试使用以下代码将图像从目录加载到数据库中。

当我执行 SP 时,我会得到以下表单,即我包含的打印语句;

USE [store]
GO
DROP PROCEDURE [dbo].[insert2img]
/****** Object:  StoredProcedure [dbo].[insert2img]    Script Date: 07/08/2009 15:36:15 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


Create PROC [dbo].[insert2img]
as
Begin
   Declare @img1 as varbinary(max)
    Declare @dircmd as varchar(max)
             DECLARE @filename varchar(100)
  DECLARE @filepath varchar(100)
  DECLARE @maxRowID int
   DECLARE @count int
  DECLARE @tempXMLFileName table (RowId int identity(1,1), name varchar(100))
            Declare @sql as varchar(max)
        Set @count = 1 
        Set @dircmd = 'MASTER..XP_CMDSHELL "dir/b '+ 'C:\Images\*.*"'


    INSERT
      @tempXMLFileName exec (@dircmd)
        SET @maxRowID = (SELECT max(RowId) FROM @tempXMLFileName)
WHILE @count <= @maxRowID
 BEGIN
          SET @filename = (SELECT name FROM  @tempXMLFileName WHERE [RowId] = @count)
          Print @filepath
          Set @filepath = 'C:\Images\'+@filename
                Set @sql = 'Insert into dbo.aaaimg (sno,imgdate,imgname,img)
                            Select '' @count'',getdate(),''Image'',
                            BulkColumn from Openrowset(Bulk ''' + @filepath + ''',Single_Blob) as tt  '                       
        print @sql
        Print @count

        Exec (@sql)

        Set @filepath=' ' 
        print @filepath
        Set @count = @count + 1 

end
end

下面列出了我用几个打印语句执行 SP 时的输出;

Insert into dbo.aaaimg (sno,imgdate,imgname,img)
                            Select ' @count',getdate(),'Image',
                            BulkColumn from Openrowset(Bulk 'C:\Images\n0501.jpg', Single_Blob) as tt  
1

(1 row(s) affected)

我的问题是我试图将 @count 的值插入到数据库中,但我最终得到的是数据库中的实际单词 @count 而不是值。我认为这与分隔符有关,但我无法正确组合。

谢谢,

詹姆斯。

【问题讨论】:

    标签: sql dynamic insert


    【解决方案1】:

    您需要像这样将@count 变量连接到@sql 变量中:

    Set @sql = 'Insert into dbo.aaaimg (sno,imgdate,imgname,img)
    Select ' + CAST(@count AS VARCHAR) + ',getdate(),''Image'',
    BulkColumn from Openrowset(Bulk ''' + @filepath + ''',Single_Blob) as tt '
    

    话虽如此,我还是要提出一点,不建议将图像存储在 SQL Server 本身中。最好将图像的路径而不是图像本身存储在数据库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-17
      • 2012-01-27
      • 2012-02-09
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多