Я пытаюсь обновить серию Document_Files, которые хранятся в следующей таблице.
Document_File :
- FileID int
- TypeID int
- FilePath nvarchar (255)
- FileData varbinary (max)
Я пытаюсь обновить столбец 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" не существует
Кто-нибудь знает, что я делаю неправильно, и если есть лучший способ сделать это?