我需要向数据库插入大约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
...
但是当我运行这个脚本并且在某个单个查询中存在一些错误(例如,文件不存在)时,脚本停止工作, 所以我必须删除错误的行并再次运行它。 是否存在某些方法来跳过有缺陷的查询并保持整个脚本运行?
谢谢, 凯特。
答案 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