处理多个插入脚本(sql)中的错误

时间:2010-10-18 11:41:30

标签: sql insert

我需要向数据库插入大约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

...

但是当我运行这个脚本并且在某个单个查询中存在一些错误(例如,文件不存在)时,脚本停止工作, 所以我必须删除错误的行并再次运行它。 是否存在某些方法来跳过有缺陷的查询并保持整个脚本运行?

谢谢, 凯特。

2 个答案:

答案 0 :(得分:0)

如果您使用的是SQL SERVER,则可以将每个INSERT语句包含在try catch块

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

由于您的查询是脚本化的,因此您也可以将此错误处理添加到脚本中。

答案 1 :(得分:0)

检查这是否有帮助。您可以在每个批量插入语句之前添加它 -

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