我试图将我从选择语句中得到的所有错误插入到错误表中,但我无法做到这一点。
BEGIN TRY
INSERT INTO [database]..[Table]([Column1], [Column2], [Column3])
SELECT
[Column1], [Column2], [Column3]
FROM
[database]..[SourceTable]
END TRY
BEGIN CATCH
INSERT INTO [database]..[ErrorTable]([Column1], [Column2], [Column3])
-- What to do here? .... (select the same query as up?)
SELECT
[Column1], [Column2], [Column3]
FROM [database]..[SourceTable]
END CATCH
现在我想看到我的Error
表中的所有错误以及表中正确的所有一次,但我没有得到这个工作?
源系统的数据类型是nvarchar
,我的列是INT
,因为值应该只有INT…所以这是源系统的糟糕设计?
如果插入中的任何行失败,将在该批处理中插入的所有行也将失败。
--在这里做什么?……(选择与up相同的查询?)
所以…是的…同样的查询,因为所有的行都被重定向了,即使只有一个失败了。
你有什么理由认为他们会失败?主键?外键?还有其他约束或触发因素吗?如果是这种情况,您可以对数据集进行预检查,查找那些丢失的键,并将这些行保存到错误表中,然后插入其余的行,您甚至不需要try catch。
编辑:
在那些nvarchar且应为INT的列中,您可以过滤patindex(“%[^0-9]]”的行,
我建议您努力解决问题,而不是尝试捕获错误。因此,查找不匹配的值,如下所示:
SELECT [Column1], [Column2], [Column3]
FROM [database]..[SourceTable]
WHERE Column1 LIKE '%[^0-9'%] OR
Column2 LIKE '%[^0-9'%] OR
Column3 LIKE '%[^0-9'%];
如果您使用的是SQLServer 2012,请使用try_convert()
:
SELECT [Column1], [Column2], [Column3]
FROM [database]..[SourceTable]
WHERE try_convert(int, Column1) is null OR
try_convert(Column2) is null OR
try_convert(Column3) is null;
您可以使用类似的语句来插入正确的数据。
试试这个
Begin Catch
INSERT INTO [database]..[ErrorTable]
(
[Column1],
[Column2],
[Column3],
[Column4],
[Column5],
[Column5]
)
SELECT
cast (ERROR_NUMBER() as <your datatype>)
,cast (ERROR_SEVERITY() as <your datatype>)
,cast (ERROR_STATE() as <your datatype>)
,cast (ERROR_PROCEDURE() as <your datatype>)
,cast (ERROR_LINE() as <your datatype>)
,cast (ERROR_MESSAGE() as <your datatype>)
End Catch
我试图在JAVA中的while循环中使用try-catch语句,只是为了在向nextInt提供字符串输入时捕获异常,我不知道为什么它在第一次错误输入后继续引发异常。 密码 当给出正确的输入时。 但当输入错误时,这种情况会持续无限次。 会有很大的帮助,即使有人回答。 谢谢你。
我正在开发一个永远运行的Java程序,但我不知道如何在不使用“try-catch”的情况下将每个循环延迟一秒钟。我试过了 但它似乎不起作用。有人能帮我吗?
我对投球的尝试/接球感到困惑。函数中有两个可能的IOExceptions。一,我想抓住并继续。另一个我想抛出一个异常让前面的函数处理。 如果IOException无法打开文件,我想捕获它,通知用户,然后继续。如果清除目录时出现IOException,我想抛出一个异常并在调用代码中处理它。
本文向大家介绍JavaScript 避免尝试/抓住对性能至关重要的功能,包括了JavaScript 避免尝试/抓住对性能至关重要的功能的使用技巧和注意事项,需要的朋友参考一下 示例 某些JavaScript引擎(例如,Node.jsIgnition + turbofan之前的Chrome的当前版本和较旧版本)无法在包含try / catch块的函数上运行优化器。 如果您需要处理关键性能代码中的异常
问题内容: 遵循Android标签的任何人都可能对我很熟悉。我很难为我的高分实现SQLite数据库。这也是我第一次使用SQLite。 我正在尝试仅插入两个变量-int和long。我的方法无法正常工作。除了上面讨论的内容外,任何其他建议也应受到赞赏。 预先感谢您的帮助。 Highscores.java DatabaseHelper.java LogCat输出 问题答案: 在这行上,打开数据库: 这会
为了快速地将数据插入到数据库中,我一直在尝试生成一个巨大的SQL(大约200个查询),但由于某种原因,我得到了SQL错误,但不确定是什么导致了它。 错误: SQL错误(1064):您的SQL语法有错误;查看与您的MySQL server版本相对应的手册,以了解在第8行附近使用的正确语法 下面是我的一部分代码: 你可以在Pastebin上找到我的完整SQL。 不知道是什么原因造成的,因为后面的“6”