我正在尝试更新存储在下表中的一系列Document_Files。
文档文件:
我正在尝试使用FileData
为特定类型的每条记录更新FilePath
列,以找到要导入的BLOB。
我可以使用以下内容一次更新它们:
UPDATE Document_File
SET FileData = (SELECT * FROM OPENROWSET(
BULK 'C:\Reports\Report - District1.xlsx', SINGLE_BLOB) AS T)
WHERE FileID = 123456
我尝试使用以下方法遍历所需文件类型的一系列记录:
DECLARE @MyFile varchar(100)
DECLARE @LoopCounter int
DECLARE @FileID varchar(255)
DECLARE @isExists int
SET @LoopCounter = (SELECT COUNT(FilePath) FROM Document_File WHERE TypeID = 123)
SET @FileID = (SELECT TOP 1 FileID FROM Document_File WHERE TypeID = 123) -1
WHILE @LoopCounter > 0
BEGIN
SET @MyFile = (SELECT TOP 1 FilePath FROM Document_File WHERE TypeID = 123
AND FileID > @FileID)
EXEC master.dbo.xp_fileexist @MyFile, @isExists OUTPUT
IF(@isExists = 1)
BEGIN TRY
BEGIN TRAN
UPDATE Document_File
SET FileData = (SELECT * FROM OPENROWSET(BULK N'@MyFile', SINGLE_BLOB) AS T)
WHERE TypeID = 123 AND FileID > @FileID
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 BEGIN
ROLLBACK TRAN
END
END CATCH
IF @@TRANCOUNT > 0 BEGIN
COMMIT TRAN
END
SET @LoopCounter = @LoopCounter -1
SET @FileID = @FileID +1
END
我收到一个错误提示:
无法批量加载。文件“ @MyFile”不存在
有人知道我在做什么,是否有更好的方法来做到这一点?
答案 0 :(得分:0)
OPENROWSET不接受参数,因此您的行:
(SELECT * FROM OPENROWSET(BULK N'@MyFile', SINGLE_BLOB)
失败,原因是您已经引用了参数名称,也因为OPENROWSET不允许使用参数。
要使此方法起作用,您必须使用动态SQL,即动态构建SQL字符串,然后执行它。
这里是example。