2016-05-27 6 views
0

Ansicht Spaltenlänge (PLZ) zu varchar erhöht hat (8000) !, wenn sie von der zugrunde liegenden Tabelle erstellt, dann ist es die Spaltenlänge nur varchar (8)Ansicht Säulenlänge geändert, wenn mit Fall erstellt und ersetzen

Datenbank ist SQL Server 2012.

create view v_testing as 
    select Postcode = CASE WHEN LEN(A.RealPostcode) = 0 THEN NULL 
          ELSE REPLACE(A.RealPostcode,' ','') 
         END, 
      A.RealPostcode 
    from dbo.Table A; 
+1

Warum Sie über die Länge egal? Es beeinflusst nichts wirklich. –

+0

Scheint wie 'ersetzen' hat immer Rückgabetyp varchar (8000), wenn varchar Eingabe. Mehr oder weniger ANSI SQL definiert. – jarlh

Antwort

2

https://msdn.microsoft.com/en-us/library/ms186862.aspx

Wenn string_expression nicht vom Typ varchar (max) oder nvarchar (max) ist, ersetzen Sie den Rückgabewert bei 8000 b kürzt ytes. Um Rückgabewerte größer als 8.000 Byte, muss String_Ausdruck explizit auf einen großen Datentyp Datentyp umgewandelt werden.

So verwenden nur cast Funktion:

create view v_testing as 
    select Postcode = CASE WHEN LEN(A.RealPostcode) = 0 THEN NULL 
          ELSE CAST(REPLACE(A.RealPostcode,' ','') AS VARCHAR(8)) 
         END, 
      A.RealPostcode 
    from dbo.Table A; 
Verwandte Themen