Динамический SQL для загрузки изображений из каталога - PullRequest
1 голос
/ 09 июля 2009

Новичок в этом и очень застрял! Я пытаюсь загрузить изображения в базу данных из каталога, используя следующий код.

Когда я выполняю 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 в БД, а не значение. Я предполагаю, что это связано с разделителями, но я не могу получить правильную комбинацию.

Спасибо

Джеймс.

1 Ответ

1 голос
/ 09 июля 2009

Вам нужно объединить переменную @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. Лучше хранить путь к изображению, а не само изображение в БД.

...