【问题标题】:sql insertion of a picture into table with sql dynamique script into a stored procedure with a path in parametre使用sql dynamique脚本将图片插入表中的sql插入到带有参数路径的存储过程中
【发布时间】:2018-10-30 12:50:11
【问题描述】:

1-我有一个脚本,它使用动态 sql 脚本将图像插入到 sql server 表中,但它想成为一个存储过程,作为参数输入了一个指定照片的路径,但它不起作用

这里是动态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;

【问题讨论】:

    标签: sql-server tsql dynamic-sql


    【解决方案1】:

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

    我还没有测试过这个,因为我现在不能这样做,但它至少应该让你对下一步有一个想法。

    【讨论】:

    • tnx 我会测试这个,我会回复。
    • Chargement en masse possible car le fichier "C:\Users\salma\Desktop\tarik zahraoui.jpg *
    • 路径后面是否有“最不可能的 à/ne peut pas être ouvrir/ouvert”?可能是执行权问题。话音页面linklink
    猜你喜欢
    • 2014-02-25
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多