2011-12-14 5 views
3

Я использую Microsoft Sql Server 2008. Я использую представление (dbo.building_piclink), чтобы получить имена фотографий (@imgName) и вставить фотографии в таблицу из файла. Мне нужно также принять это название фотографии и добавить его в колонку под названием att_name, но я не могу понять синтаксис на операторе вставки, чтобы добавить его в.Вставить в 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 

, но я получаю сообщение об ошибке, как это:

Msg 208, уровень 16, состояние 1, строка 1 Invalid имя объекта 'b26382_3_775682.jpg'

Я пытался просто делать вставку на att_name:

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

не повезло. Я ничего не вижу в синтаксисе.

Спасибо!

+1

Я бы предложил немного упростить, чтобы помочь решить проблему. Выполняется ли запрос 'SELECT * FROM OPENROWSET' ..., если вы запускаете его изолированно? –

ответ

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 заявление в изоляции, просто чтобы убедиться, что заявление на свои собственные работы правильно? Как только это сработает - затем интегрируйте его в свой сохраненный proc и превратите его в динамический оператор SQL ...

Обновление: Да - как я сказал в своем ответе (несколько строк отсюда): вам нужно поместить имя файла, который вы хотите вставить в attName в одинарные кавычки - ваши последние комментарии до сих пор не делать ....

Попробуйте это:

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

ли эта работа?

Смежные вопросы