我想将图像插入图像字段,最好使用接受图像路径的存储过程。经过一番折腾后我想出了这个;
-- functional
DECLARE @parameters nvarchar(max) = '';
DECLARE @sql_string nvarchar(max) =
N'UPDATE MyTable
SET MyImageField = (SELECT BulkColumn
FROM Openrowset(Bulk ''' + @PathToMyImage + ''', Single_Blob) ImageData)
WHERE MyPrimaryKey = ' + CAST(@PrimaryKey AS NVARCHAR(max));
EXECUTE sp_executesql @sql_string, @parameters
我这样做是因为当我尝试时;
--Not functional
INSERT INTO MyTable (MyImageField)
VALUES ((SELECT BulkColumn
FROM Openrowset(Bulk @PathToMyImage, Single_Blob) ImageData));
SQL Server 抛出错误,抱怨 Bulk 需要一个字符串。我不想诉诸 sp_executesql 来实现可维护性/可读性,有没有更好的方法来解决这个问题?
You do必须使用动态 sql,但您可以使用 quotename() 来避免嵌入式引号噩梦,并且您应该将主键作为实际参数传递。
DECLARE @sql_string nvarchar(max) =
N'UPDATE MyTable
SET MyImageField = (SELECT BulkColumn
FROM Openrowset(Bulk ' + quotename(@PathToMyImage,nchar(39)) + ', Single_Blob) ImageData)
WHERE MyPrimaryKey = @PrimaryKey';
EXECUTE sp_executesql @sql_string, N'@PrimaryKey int', @PrimaryKey
nchar(39) 是单引号。路径名中的所有单引号都将被正确转义,并且路径将用单引号括起来以确保安全连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)