使用SQL动态脚本将图片插入表中的SQL插入具有参数路径的存储过程中

时间:2018-10-30 12:50:12

标签: sql-server tsql dynamic-sql

1-i有一个脚本,该脚本使用动态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 :(得分:0)

首先,您没有在请求中使用参数,而是在使用未分配的内部参数来构建动态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;

由于我目前无法进行此操作,因此我尚未对其进行测试,但这至少应该使您对下一步有所了解。