Как добавить изображение в таблицу, когда направление находится в переменной (в SQL)? - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь добавить изображение в таблицу, в которой тип данных является varbinary (MAX) и который получен при вызове процедуры, проблема в том, что обычно я добавляю изображение в таблицу, используя следующий код:

insert into Image select * from openrowset (bulk  N'D:\Computer Programing\z Programas\SQL Practicas\images\ cell shoes.png', single_blob) as image

(в таблице есть только 1 неключевой параметр, поэтому я не указываю добавляемый параметр), но теперь я пытаюсь добавить изображение с помощью переменной itне работает (я предполагаю, это потому, что структура кода, которую я не совсем понимаю (я просто украл ее: D)). В любом случае, проблемный код следующий:

create procedure CrearProducto (@nombre nvarchar(50), @precio money, @descripcion varchar(200), @image varbinary(MAX), @username varchar(20))
as
    --"Producto" is just another table
    insert into Producto values (@nombre, @precio, @descripcion, NULL, NULL, NULL, 00)

    --Here is where I have the problem with the variable @image
    insert into Image select * from openrowset (bulk  @image, single_blob) as image

    --Again I am having the same problem, this time I'm trying to put the result in a variable to make a comparation at the end
    declare @image2 varbinary(MAX) = (select * from openrowset (bulk  @image, single_blob) as image)
    update Producto set id_Image = (select id_Image from Image where image = @image2)
go

Если вы знаете какой-либо другой способ добавить изображение в таблицу, это также будет полезно. Спасибо за помощь, я надеюсь, что это не слишком сложно и что я не делаю слишком ошибок, хахаха, добрый день.

1 Ответ

0 голосов
/ 27 октября 2019

В исходном рабочем коде:

insert into Image select * from openrowset (bulk  N'D:\Computer Programing\z Programas\SQL Practicas\images\ cell shoes.png', single_blob) as image

... вы передаете путь к файлу изображения в параметр OPENROWSET. Появляется в хранимой процедуре, которую вы используете для ее замены: вместо пути к файлу передается параметр @image. Однако @image теперь является байтовым массивом самого файла изображения, а не путем к файлу (в зависимости от его типа varbinary (max), а не varchar (n)). Вы должны просто установить значение столбца varbinary (max) image в базе данных равным значению переменной @image. то есть (и здесь я должен угадать схему):

create procedure CrearProducto (@nombre nvarchar(50), @precio money, @descripcion varchar(200), @image varbinary(MAX), @username varchar(20))
as
    --"Producto" is just another table
    insert into Producto values (@nombre, @precio, @descripcion, NULL, NULL, NULL, 00)

    insert into Image
    values (@image)

    update Producto 
    set id_Image = image
    -- You appear to be missing a WHERE clause here. This will set all Producto rows
go
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...