如何在SQL Server 2005中捕获截断错误?

时间:2011-05-04 16:34:01

标签: sql sql-server-2005 error-handling insert

我正在尝试将数据插入表格中。比如说这是我的表:

CREATE TABLE firstTable (first_name VARCHAR(5), last_name VARCHAR(10))

当我尝试插入此表时,first_name字段中超过5个字符的任何数据都会导致以下错误。

Msg 8152,Level 16,State 14,Line 1 字符串或二进制数据将被截断。 声明已经终止。

有没有办法让我在存储过程中捕获此错误?我尝试在insert语句之后放置一个if @@ERROR <> 0,但是该过程永远不会进入错误检查,因为该语句已被终止!

有什么想法吗?

TIA!

2 个答案:

答案 0 :(得分:5)

您可以使用TRY ... CATCH

BEGIN TRY

INSERT INTO firstTable VALUES ('long string','foo')

END TRY
BEGIN CATCH

SELECT ERROR_NUMBER(), ERROR_MESSAGE()
/*The error will not be propagated to the client. You need
 to use RAISERROR if you want this to happen*/

END CATCH

答案 1 :(得分:1)

在插入之前,您可以使用LEN函数来确定字符串是否太长。例如,如果您只想插入截断的字符串,则可以执行以下操作:

IF(LEN(@firstName) > 5) SET @firstName = LEFT(@firstName, 5)
IF(LEN(@lastName) > 10) SET @lastName = LEFT(@lastName, 10)