Во-первых, вы не используете параметры в запросе, вы используете неназначенные внутренние, которые строят динамический 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;
Я не тестировал этот тест, так как в настоящее время не могу этого сделать, но он должен хотя бы дать вам представление о следующем шаге.