2010-10-18 50 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 

由於您的查詢腳本,你可以添加這個錯誤處理腳本爲好。