gpt4 book ai didi

sql-server - 如何在 OPENROWSET(BULK...) 中动态指定文件路径?

转载 作者:行者123 更新时间:2023-12-03 02:20:12 25 4
gpt4 key购买 nike

我想将图像插入图像字段,最好使用接受图像路径的存储过程。经过一番摸索后,我想出了这个;

-- 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,有更好的方法来解决这个问题吗?

最佳答案

确实必须使用动态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) 是单引号。路径名中的所有单引号都将被正确转义,并且路径将用单引号括起来以确保安全连接。

关于sql-server - 如何在 OPENROWSET(BULK...) 中动态指定文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16966922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com