Обработка ошибки в скрипте множественной вставки (sql) - PullRequest
0 голосов
/ 18 октября 2010

Мне нужно вставить около 500 изображений в базу данных однажды. У меня есть сценарий, который создает сценарий нескольких запросов:

SELECT 'INSERT INTO [truvle].[dbo].[Ads_Images]([Img_adId],[Img_image]) 
     SELECT CONVERT(INT, ' + CAST([Ad_id] AS VARCHAR) + ')' +
   ',(SELECT * FROM OPENROWSET(BULK N''' +  [Ad_path] + ''', SINGLE_BLOB) as [something]) GO'
  FROM [truvle].[dbo].[Ads]

В результате я получаю 500 запросов "вставки", подобных этим:

...

INSERT INTO [truvle].[dbo].[Ads_Images]([Img_adId],[Img_image])        
SELECT CONVERT(INT, 1),(SELECT * FROM OPENROWSET(BULK N'some_path/Banners/58097048.gif', SINGLE_BLOB) as [something]) 
GO

INSERT INTO [truvle].[dbo].[Ads_Images]([Img_adId],[Img_image])        
SELECT CONVERT(INT, 2),(SELECT * FROM OPENROWSET(BULK N'some_path/Banners/10404012.gif', SINGLE_BLOB) as [something]) GO

INSERT INTO [truvle].[dbo].[Ads_Images]([Img_adId],[Img_image])        
SELECT CONVERT(INT, 3),(SELECT * FROM OPENROWSET(BULK N'some_path/Banners/10398875.gif', SINGLE_BLOB) as [something]) GO

...

Но когда я запускаю этот скрипт и в каком-то одном запросе возникает ошибка (например, файл не существует), скрипт перестает работать поэтому я должен удалить неправильный ряд и запустить его снова. Существует ли какой-либо способ пропустить дефектный запрос и сохранить работу всего скрипта?

Спасибо, Katy.

Ответы [ 2 ]

0 голосов
/ 18 октября 2010

Проверьте, помогает ли это. Вы можете добавить это перед каждым из ваших массовых операторов вставки -

DECLARE @doesExist INT

SET NOCOUNT ON
EXEC xp_fileexist 'C:\test.txt', @doesExist OUTPUT
SET NOCOUNT OFF

IF @doesExist = 1
BEGIN
BULK INSERT Test FROM 'C:\test.txt'
END
0 голосов
/ 18 октября 2010

Если вы используете SQL SERVER, вы можете заключить каждый оператор INSERT в блок try catch

BEGIN TRY
     { Your INSERT statement }
END TRY
BEGIN CATCH
     { INSERT to a LOG table} 
END CATCH

Поскольку ваши запросы выполняются по сценарию, вы можете просто добавить эту обработку ошибок в сценарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...