Czy istnieje skuteczny sposób, aby zobaczyć przyczynę „Ciąg znaków lub dane binarne zostałyby obcięte”?

13

Jest to kontynuacja tego pytania . Jest to również związane z tym żądaniem funkcji od firmy Microsoft.

Minęło jednak wiele lat i od czasu zgłoszenia pojawiło się na rynku kilka ważnych wydań.

Pytanie: czy SQL Server 2017 zapewnia jakiś mechanizm ułatwiający znalezienie podstawowej przyczyny tego błędu? Czy jest to tak trudne do zbadania, jak około 9 lat temu, kiedy zgłoszono problem?

Aleksiej
źródło
Spędzam co najmniej 4 godziny tygodniowo na debugowaniu tego pojedynczego błędu, a SQL nie jest nawet w moim opisie zadania.
Tonny

Odpowiedzi:

20

Nie było żadnych zmian. SQL Server 2017 nadal wyświetla ten sam niejasny komunikat o błędzie i nie zapewnia żadnego mechanizmu wykrycia obrażającego wiersza / kolumny.

Ten element Connect miał ponad 1600 głosów, gdy Connect został wycofany:

Najnowszy komentarz Microsoftu był następujący:

Najnowsza aktualizacja - pracujący nad nią programista rozumie wyzwania związane z tworzeniem pełnej poprawki. Może być trudne zebranie informacji o kolumnach potrzebnych do wygenerowania pełnego komunikatu o błędzie aż do faktycznej funkcji konwersji w taki sposób, aby nie wpływać na wydajność wstawiania lub aktualizacji. W krótkim okresie możemy wdrożyć coś taniego, na przykład rejestrować rodzaj i długość skracanych danych. Jest jeszcze za wcześnie, aby wiedzieć, kiedy taka poprawka wejdzie do publicznie widocznej wersji.

Najlepsze, co mogę zasugerować, to głosować na ten element (i komentować go, opisując wartość biznesową, która by to dla ciebie dodała).

Aaron Bertrand
źródło
+1. Aby dodać jeden z mniej nieefektywnych sposobów, aby dowiedzieć się, jaki jest ślad (jeśli nie masz dziennika aplikacji), użyj profilera i filtru (według hosta / użytkownika / aplikacji / zapytania / itp.). Może to również być przydatne: nimblegecko.com/…
jean
3

Odpowiedzi na nasze modlitwy zostały wskazane w tym blogu MDSN :

SQL Server 2019 wprowadza nową wiadomość z dodatkowymi informacjami kontekstowymi.

Błąd powinien być teraz o wiele bardziej znaczący:

Msg 2628, poziom 16, stan 1, wiersz 14 Dane łańcuchowe lub binarne zostałyby obcięte w tabeli „DbName.SchemaName.TableName”, kolumna „Col”. Skrócona wartość: „...”.

Dobra wiadomość jest taka, że ​​ta zmiana zostanie cofnięta zarówno w 2017, jak i 2016 roku:

Ta nowa wiadomość jest również importowana do SQL Server 2017 CU12 (oraz w nadchodzącym SQL Server 2016 SP2 CU), ale nie jest domyślnie. Należy włączyć flagę śledzenia 460, aby zastąpić komunikat o identyfikatorze 8152 kodem 2628 na poziomie sesji lub serwera.

Aleksiej
źródło