SQL Server: динамически вставлять изображение в таблицу

У меня есть таблица SQL Server Products и я хочу вставить изображение для каждого в столбец изображения на основе кода продукта, где имя изображения идентично коду продукта.

UPDATE Products
 SET ProdImage = (SELECT * FROM Openrowset
 ( Bulk 'C:\Users\DELL\Desktop\ImageCatalog\sbrk.jpg' , Single_Blob)
 as image)
 WHERE CODE = 'sbrk'
GO

Имя изображения и кода sbrk когда я пытался сделать динамический путь, получаю исключение:

Ожидание STRING, TEXT_LEX

2 ответа

Я считаю, что для динамического пути вам понадобится использовать динамический SQL. Вы не можете просто передать параметр в оператор BULK:

DECLARE @sql NVARCHAR(MAX)
DECLARE @Path NVARCHAR(MAX)
DECLARE @Code NVARCHAR(200)

SET @Path = 'C:\Users\DELL\Desktop\ImageCatalog\sbrk.jpg' 
SET @Code = 'sbrk'

SET @sql = '
UPDATE Products
 SET ProdImage = (SELECT * FROM Openrowset
 ( Bulk N''' + @Path + ''' , Single_Blob)
 as image)
 WHERE CODE = ''' + @Code + ''''

EXEC sp_executesql @sql

ОБНОВИТЬ

Turboc имеет это право (нет комментариев, чтобы комментировать tho). Я пропустил часть имени файла образа, совпадающего с кодом:

DECLARE @sql NVARCHAR(MAX)
 DECLARE @Path NVARCHAR(MAX)
 DECLARE @Code NVARCHAR(200)

 SET @Path = 'C:\Users\DELL\Desktop\ImageCatalog\' 
 SET @Code = 'sbrk'

 SET @sql = '
 UPDATE Products
 SET ProdImage = (SELECT * FROM Openrowset
 ( Bulk N''' + @Path + @Code + '.jpg'' , Single_Blob)
 as image)
 WHERE CODE = ''' + @Code + ''''

 EXEC sp_executesql @sql


Я думаю, что выражение @Path, данное darksolace, возможно, потребуется изменить, чтобы вынуть код.jpg в конце.

SET @Path = 'C:\Users\DELL\Desktop\ImageCatalog\'

Затем измените инструкцию update, чтобы добавить код и.jpg в объемный подзапрос. У меня сейчас нет sql со мной, так что "'" может быть немного.

UPDATE Products
 SET ProdImage = (SELECT * FROM Openrowset
 ( Bulk N''' + @Path + @Code + '.jpg''' , Single_Blob)
 as image)
 WHERE CODE = ''' + @Code + ''''

Но я думаю, что с тем, что рекомендуется darksolace, вы должны быть близки.

licensed under cc by-sa 3.0 with attribution.