我正在尝试将数据插入表格中。比如说这是我的表:
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!
答案 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)