2009-07-09 4 views
1

새로운 기능과 매우 달라 붙은 기능! 다음 코드를 사용하여 디렉토리에서 이미지를 데이터베이스로로드하려고합니다.디렉토리에서 이미지를로드하는 동적 SQL

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\'[email protected] 
       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의 값을 삽입하기 위해 노력하고, 대신 나는 dB의 실제 단어 @count이 아닌 값으로 끝날 것입니다. 구분 기호로 처리한다고 가정하지만 올바른 조합을 얻을 수는 없습니다.

고마워요,

제임스.

답변

1

이 같은 @Sql 변수에 @count 변수를 연결하는 필요할 것 :

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 서버 자체에서 이미지를 저장하지 않는 것이 좋습니다 포인트를 올릴 거라고 말했다 가졌어요. 이미지 자체보다는 db의 이미지 경로를 저장하는 것이 좋습니다.