Ваш код имеет несколько проблем:
1) Вы выбираете имя файла из представления - но что, если это представление содержит более одной записи? Какое имя файла вы выбираете ?? Ваш текущий код в первую очередь не работает так, как он есть, и даже если бы он работал - вы все равно потенциально можете выбрать сотни имен файлов в одну переменную - что, конечно, не сработает ....
Итак, сначала вам нужно исправить это:
SET @imgName = 'SELECT (items) FROM dbo.building_piclink'
Прежде всего - теряйте одинарные кавычки:
SELECT @imgName = (items) FROM dbo.building_piclink
Но теперь - у вас есть уникальный идентификатор, который вы можете выбрать? Или вы хотите получить только первую запись (что бы это ни было) ??
Так что либо вам нужно:
SELECT @imgName = ImageFileName FROM dbo.building_piclink WHERE ..........
и заполните это предложение WHERE
условием, гарантирующим возврат только одной строки, или используйте TOP 1
:
SELECT TOP (1) @imgName = ImageFileName FROM dbo.building_piclink
В этом случае - вы получите только одно имя файла - если вы не укажете ORDER BY
, тогда нет никакой гарантии, что вы получите - может быть, вы захотите добавить ORDER BY DueDate
или что-то еще чтобы расставить приоритеты, какие имена файлов вы получите первым.
2) Ваш код для загрузки данных изображения также неработоспособен - вам нужно создать SQL-оператор в виде строки и затем выполнить его (называемый динамический SQL ) - что-то как это:
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'
EXEC(@insertString) -- actually execute your SQL statement!
С этими двумя исправлениями вы должны быть в пути, чтобы заставить эту штуку работать