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;
答案 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;
由于我目前无法进行此操作,因此我尚未对其进行测试,但这至少应该使您对下一步有所了解。