2010-10-18 67 views
0

我需要一次向数据库 插入大约500张图像。 我有一个脚本,即建立多个查询脚本:在多个插入脚本中处理错误(sql)

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 

...

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

谢谢, 凯蒂。

回答

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 
+0

它的工作原理非常感谢! – 2010-10-28 13:16:18

0

如果您正在使用SQL Server,你可以在一个try catch块包围每一个INSERT语句

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

由于您的查询脚本,你可以添加这个错误处理脚本为好。