SQL вставка изображения в таблицу с помощью динамического сценария SQL в хранимую процедуру с путем в параметре - PullRequest
0 голосов
/ 30 октября 2018

1-у меня есть сценарий, который вставляет изображение в таблицу сервера SQL с помощью динамического сценария SQL, но он хотел бы стать хранимым процессом с параметром, указав путь, который обозначает фотографию, но она не работает

вот сценарий динамического sql:

insert into cliente (nom_cli,pic_cli) 
select 'tarik' , bulkcolumn
from openrowset (bulk 'C:\Users\salma\Desktop\tarik zahraoui.jpg' , 
 single_blob)as pic_cli

здесь хранимая процедура

 create procedure [dbo].[sp_doStuff] (@nom_cliente nvarchar(4000) , 
  @path_in nchar(265))
 as
 begin
  declare @img nvarchar(4000);
  declare @nom_cli nvarchar(4000) ;
  declare @sql nvarchar(4000);
  declare @path nvarchar(4000);
  set @sql='insert into cliente (nom_cli,pic_cli)  select ' + @nom_cli +  ', 
  bulkcolumn
  from openrowset(bulk ''' + (@path) + ''' , single_blob) as pic_cli'
  execute sp_executesql @sql,@path=@path_in,@nom_cli=@nom_cliente
 end;

1 Ответ

0 голосов
/ 30 октября 2018

Во-первых, вы не используете параметры в запросе, вы используете неназначенные внутренние, которые строят динамический sql. Кроме того, установите кавычки вокруг параметра @nom_cliente. Теперь вы выбираете столбец с именем @nom_cliente. Я также рекомендовал бы использовать @params Попробуйте это, чтобы увидеть разницу между кавычками вокруг @ nom_cliente.

declare @nom_cli nvarchar(20) = 'tarik', @path nvarchar(20) ='C:\Users\salma\Desktop\tarik zahraoui.jpg';
declare @sql nvarchar(4000);

set @sql = 'insert into cliente (nom_cli,pic_cli)  select ' + @nom_cli +  ', bulkcolumn from openrowset(bulk ''' + (@path) + ''' , single_blob) as pic_cli';
select @sql;
set @sql = 'insert into cliente (nom_cli,pic_cli) select ''' + @nom_cli +''' , bulkcolumn from openrowset (bulk ''' + @path + ''' ,  single_blob)as pic_cli';
select @sql;

Что касается процедуры, может быть что-то вроде этого.

create procedure [dbo].[sp_doStuff] (@nom_cli nvarchar(4000), @path nchar(265))
as
begin
    declare @sql nvarchar(4000), @params nvarchar(4000);         

    set @sql='insert into cliente (nom_cli,pic_cli)  select ''' + @nom_cli +  ''', 
          bulkcolumn
          from openrowset(bulk ''' + (@path) + ''' , single_blob) as pic_cli';

    set @params = N'@nom_cli NVARCHAR(4000), @path NVARCHAR(256)';

    execute sp_executesql @sql,@params, @path=@path,@nom_cli=@nom_cli;
end;

Я не тестировал этот тест, так как в настоящее время не могу этого сделать, но он должен хотя бы дать вам представление о следующем шаге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...