2011-08-22 49 views
0

我有一個表在此刻的列(ID#(INT),圖片(varbinary(MAX)),並且我有我的硬盤上的文件夾與噸圖片。該文件夾中的圖片是由「ID」我想在我的表,以配合他們。我怎麼能這樣命名?SQL:更新表與文件夾中的圖片,通過ID#

Example: 

Table Row: id=25166, picture=NULL 
25166.jpg 
+0

也許您可以告訴我們更多關於您嘗試使用的技術的信息......顯然,您將循環訪問指定目錄中的文件,並使用圖像內容,但您想要使用哪些工具? –

+0

你使用什麼語言:SQL端和SQL數據庫和服務器之間的接口,我猜SQL服務器和C#,我是對的嗎? – Johan

+0

@Chris哦對不起,我正在使用SQL Server 2008.我想我應該可以這麼做,或者我需要另一種語言來幫助循環所有內容?這應該是一次性的事情,而不是我需要建立一個前端來做更多的事情,而不僅僅是一次...... – fwaokda

回答

1

如果你需要它僅使用SQL簽了一個例子以下內容:

它使用光標循環遍歷每個不包含圖像數據的行,並且找到的每一行均使用OPENROWSET BULK提供程序加載文件。

CREATE TABLE ImageStore 
( 
id INT, 
picture VARBINARY(MAX) NULL 
) 
GO 

INSERT INTO ImageStore (id) VALUES(25166) 
INSERT INTO ImageStore (id) VALUES(25167) 

DECLARE @id INT 
DECLARE image_cursor CURSOR FOR 
SELECT id FROM ImageStore WHERE picture IS NULL 

OPEN image_cursor; 

FETCH NEXT FROM image_cursor 
INTO @id; 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    DECLARE @sql NVARCHAR(MAX) 

    DECLARE @imagePath NVARCHAR(255) 
    SET @imagePath = 'C:\' + RTRIM(LTRIM(STR(@id))) + '.gif' 

    SET @sql = 'UPDATE ImageStore ' 
    SET @sql = @sql + 'SET picture = (SELECT BulkColumn FROM OPENROWSET(BULK ''' + @imagePath + ''', Single_Blob) AS picture) ' 
    SET @sql = @sql + 'WHERE id = ' + STR(@id) 

    BEGIN TRY 
     EXECUTE sp_executesql @sql 
    END TRY 
    BEGIN CATCH 

    END CATCH 

    FETCH NEXT FROM image_cursor 
    INTO @id; 
END 
CLOSE image_cursor; 
DEALLOCATE image_cursor; 

SELECT * FROM ImageStore 

DROP TABLE ImageStore 
+0

工作完美!現在我有一些新的關鍵字和東西要了解!謝謝! – fwaokda