2011-12-14 116 views
3

我正在使用Microsoft Sql Server 2008.我使用視圖(dbo.building_piclink)獲取照片名稱(@imgName)並將照片插入文件中的表中。我還需要採取此照片的名稱,並將其添加到一個名爲att_name列,但我不能找出語法上的INSERT語句添加進去。將變量插入到SQL Server中

DECLARE @imgString varchar(800) 
DECLARE @insertString varchar(3000) 
DECLARE @imgNumber int 
Declare @imgName varchar(100) 

SET @imgNumber = 1 

WHILE @imgNumber <> 10 

BEGIN 

SELECT @imgName = Lower(items) FROM dbo.building_piclink 

SET @imgString = 'C:\Documents and Settings\Administrator\Desktop\photos\' + @imgName 


SET @insertString = 'INSERT INTO dbo._building__ATTACH (DATA) 
SELECT * FROM OPENROWSET(BULK N''' + @imgString + ''', SINGLE_BLOB) as tempImg' 

Print @insertString 

SET @imgNumber = @imgNumber + 1 

EXEC(@insertString) 

END 

GO 

我已經試過

SET @insertString = 'INSERT INTO dbo._building__ATTACH (DATA, ATTNAME) 
SELECT * FROM OPENROWSET(BULK N''' + @imgString + ''', SINGLE_BLOB) as tempImg,' + @imgName 

但我得到這樣的錯誤:

消息208,級別16,狀態1,行1無效的對象名稱 'b26382_3_775682.jpg'

我曾嘗試只是在做對att_name插入:

SET @insertString = 'INSERT INTO dbo._buildingpoint__ATTACH (ATT_NAME)' + @imgName 

沒有運氣。我在語法中缺少一些東西。

謝謝!

+1

我建議稍微簡化以幫助隔離問題。如果你單獨運行SELECT * FROM OPENROWSET ...查詢是否工作? – 2011-12-14 20:24:40

回答

1

嗯,是的,你插入的字符串是不正確的 - 現在,你喜歡的東西:

INSERT INTO dbo._building__ATTACH (DATA, ATTNAME) 
    SELECT * 
    FROM OPENROWSET(BULK N'b26382_3_775682.jpg', SINGLE_BLOB) as tempImg, b26382_3_775682.jpg 

如果要插入的文件名作爲一個字符串,同時,你需要把它變成單引號(我也將扭轉列在INSERT的順序):

INSERT INTO dbo._building__ATTACH (ATTNAME, DATA) 
    SELECT 
     'b26382_3_775682.jpg', tempImg.* 
    FROM 
     OPENROWSET(BULK N'b26382_3_775682.jpg', SINGLE_BLOB) as tempImg 

而且,所有交易的喬恩建議:你可以嘗試單獨運行僅這INSERT說法,只是爲了看看有沒有什麼聲明對自己的作品是否正確?一旦有效 - 然後將其集成到您的存儲過程中,並將其轉換爲動態SQL語句...

更新:是的 - 正如我在我的答案(從這裏幾行)中說的:您需要把你要插入attName到單引號的文件名 - 你的最新評論還沒有做到這一點....

試試這個:

SET @insertString = 
    'INSERT INTO dbo._building__ATTACH (ATTNAME, DATA) ' + 
    'SELECT ''' + @imgName + ''', tempImg.* ' + 
    'FROM OPENROWSET(BULK N''' + @imgString + ''', SINGLE_BLOB) as tempImg' 

工作的呢?