Как я могу поймать ошибку усечения в SQL Server 2005? - PullRequest
5 голосов
/ 04 мая 2011

Я пытаюсь вставить данные в таблицу. Скажем, например, что это моя таблица:

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

Когда я пытаюсь вставить в эту таблицу, любые данные в поле first_name, превышающие 5 символов, вызывают следующую ошибку.

Сообщение 8152, уровень 16, состояние 14, строка 1 Строка или двоичные данные будут проигнорированы. Заявление было прекращено.

Можно ли как-нибудь отловить эту ошибку в хранимой процедуре? Я попытался поставить if @@ERROR <> 0 сразу после оператора вставки, но процедура никогда не попадает в проверку ошибок, потому что оператор был прерван!

Есть идеи?

ТИА!

Ответы [ 2 ]

5 голосов
/ 04 мая 2011

Вы можете использовать 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 голос
/ 04 мая 2011

Вы можете использовать функцию LEN, чтобы определить, являются ли строки слишком длинными, прежде чем выполнять вставку. Например, если вы хотите просто вставить усеченную строку, вы можете сделать:

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