2009-07-09 7 views
1

Nouveau pour cela et très coincé! J'essaie de charger des images dans une base de données à partir d'un répertoire en utilisant le code suivant. Lorsque j'exécute le SP, j'obtiens le formulaire suivant les instructions d'impression que j'ai incluses;SQL dynamique pour charger des images à partir d'un répertoire

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 

La sortie lorsque j'exécute le SP avec quelques instructions d'impression est listée ci-dessous;

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) 

Mon problème est que je suis en train d'insérer la valeur de @count dans la db, mais je me retrouve avec le mot réel @count dans la db et non la valeur. Je suppose que c'est à voir avec les délimiteurs, mais je ne peux pas obtenir la combinaison correcte.

Merci,

James.

Répondre

1

Vous auriez besoin de concaténer la variable @count dans la variable @sql comme ceci:

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 ' 

Après avoir dit que je lève le point qu'il est pas recommandé de stocker des images dans SQL Server lui-même. Mieux vaut stocker le chemin de l'image plutôt que l'image elle-même dans le db.

Questions connexes