Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedzi (2)

  • 5

Nie, nie informuje, jest to znany problem że dane zostają obcięte bez żadnego ostrzeżenia. Tak samo system zachowa się w przypadku zmiany typów danych z nchar na char, gdzie część danych może zostać zmodyfikowana bez żadnego komunikatu o błędzie. Proszę porzetestować wykonanie poniższego kodu:

DECLARE @Test_Altkom char(3);
SET @Test_Altkom='12345';
SELECT @Test_Altkom;

 

  • Odpowiedział
  • @ | 20.07.2013
  • TRENER ALTKOM AKADEMII
  • 3

Warto dodać, że opisane zachowanie jest zamierzone i dotyczy zarówno zmiennych skalarnych
jak i przekazywania parametrów do procedur i funkcji użytkownika.

W pozostałych przypadkach można nim sterować zmienną sesyjną ANSI_WARNINGS
W związku z tym obejściem problemu może być zastosowanie zmiennej tablicowej
jak w poniższym przykładzie:

 

 

SET ANSI_WARNINGS ON
GO

DECLARE @test table(f1 char(3))
INSERT INTO @test
VALUES ('1234')
GO

 

 

W takim przypadku otrzymamy błąd 8152: "String or binary data would be truncated"

 


  • Odpowiedział
  • @ | 23.07.2013
  • TRENER ALTKOM AKADEMII