Как определить усеченные столбцы в SQL Server 2016 - PullRequest
0 голосов
/ 20 февраля 2019

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

DBCC TRACEON (460); 

DECLARE @aa as TABLE (name varchar(5))

INSERT INTO @aa
SELECT '1234567890'

Ошибка

Строка или двоичные данные будутусеченный

Ожидаемая ошибка:

Строка или двоичные данные будут обрезаны в таблице @aa, имя столбца.Усеченное значение: «1234567890»

В соответствии с https://www.procuresql.com/blog/2018/09/26/string-or-binary-data-get-truncated/ SQL Server 2019 сможет идентифицировать усеченные столбцы, но их можно использовать в SQL Server 2016 с помощью TRACEON 460 .

С точки зрения ролей, у меня есть "public", "processadmin" и "sysadmin".

В sys.messages я думаю, что патч для этой функции основан на message_id = 2628:

+------------+------------------------------------------------------------------------------------------------------+
| message_id | text                                                                                                 |
+------------+------------------------------------------------------------------------------------------------------+
| 2628       | String or binary data would be truncated in table '%.*ls', column '%.*ls'. Truncated value: '%.*ls'. |
| 8152       | String or binary data would be truncated.                                                            |
+------------+------------------------------------------------------------------------------------------------------+

Подробности:

Microsoft SQL Server 2016 Standard (64-bit)
Version : 13.0.5149.0
Is Clustered : False
Is HADR Enabled : False
Is XTP Supported : True

1 Ответ

0 голосов
/ 20 февраля 2019

Новое сообщение об ошибке еще не было перенесено в SQL Server 2016. Начиная с это сообщение (выделено мной):

Это новое сообщение также перенесено обратно... ( и в следующей версии SQL Server 2016 SP2 CU ) ...

Этот CU еще не был доставлен.Самый последний, CU5 (13.0.5264.1), был выпущен в январе и не включал его.

И просто небольшая поправка, вам нужно включить это поведение (через флаг трассировки) даже в SQL Server 2019 CTP .Причина в том, что создается другой номер ошибки, и это может привести к поломке существующих приложений и модульных тестов, которые ведут себя на основании номера ошибки.Это будет задокументировано как критическое изменение, когда выйдет SQL Server 2019, но я уверен, что некоторые из них будут кусаться при обновлении.

...