2011-05-04 37 views
5

Bir tabloya veri eklemeye çalışıyorum.SQL Server 2005'te bir kesme hatası nasıl yakalayabilirim?

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

bu tabloya eklemek için deneyin 5 karakteri aşıyor first_name alanında herhangi bir veri aşağıdaki hatayı neden olur: Bu benim tablo olduğunu Say örneğin.

Msg 8152, Düzey 16, State 14, Satır 1 Dize veya ikili veriler kesilecek. Deyim sonlandırıldı.

Bu hatayı saklı yordamda yakalamamın bir yolu var mı? Ekleme deyiminden hemen sonra bir if @@ERROR <> 0 eklemeyi denedim, ancak deyim sonlandırıldığı için yordam hata denetimine asla uğramaz!

Herhangi bir fikrin var mı?

TIA!

+0

Dizeler çok uzunsa ne yapmak istersiniz? – rsbarro

+0

Hata yakalamak ve farklı bir yordam – chama

+0

işlemek için geçmek istiyorum Bu durumda Martin'in cevabı gitmek için yol olduğunu düşünüyorum. – rsbarro

cevap

5

Sen 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

Sen dizeleri çok uzun insert yapmadan önce olup olmadığını belirlemek için LEN işlevini kullanabilirsiniz kullanabilirsiniz. Örneğin, kesilmiş dizeyi eklemek istediğinizde aşağıdakileri yapabilirsiniz:

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

Ne güzel olurdu bir @parametre bir sütun için çok büyük olup olmadığını görmek için şema sorgulayacak küçük bir işlevdir ... – hunter

+0

Yea, bir UDF 'trimToLength 'veya böyle bir şey yazmak kolay olurdu: SET @firstName = trimToLength (@firstName, 5) '. – rsbarro