Ну, да, ваша строка вставки неверна - сейчас вы получаете что-то вроде:
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'
Это работает?