2011-05-04 84 views
5

我正試圖將數據插入到表中。例如說這是我的表:如何捕獲SQL Server 2005中的截斷錯誤?

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

當我嘗試插入到該表中,超過5個字符的FIRST_NAME字段中的任何數據導致以下錯誤。

Msg 8152,Level 16,State 14,Line 1 字符串或二進制數據將被截斷。 該聲明已被終止。

有什麼辦法讓我在存儲過程中發現這個錯誤?我試着在插入語句後面放一個if @@ERROR <> 0,但是程序從未進入錯誤檢查狀態,因爲語句已經終止!

任何想法?

TIA!

+0

如果字符串太長,您希望發生什麼? – rsbarro 2011-05-04 16:39:55

+0

我想抓住錯誤並將其轉交給另一個程序 – chama 2011-05-04 16:42:01

+0

在這種情況下,我認爲馬丁的答案是要走的路。 – rsbarro 2011-05-04 16:46:36

回答

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

可以使用LEN功能,以確定是否字符串太長,你做插入之前。例如,如果您想插入截短的字符串,您可以這樣做:

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

稍微好一點的函數會查詢模式以查看@parameter對於列是否太大... – hunter 2011-05-04 16:58:50

+0

是的,編寫UDF'trimToLength'或類似的東西很容易:'SET @firstName = trimToLength(@firstName,5)'。 – rsbarro 2011-05-04 17:01:26