Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Für Nvarchar (Max) erhalte ich nur 4000 Zeichen in TSQL?

Sie haben dies als nvarchar (max) deklariert, was 2 GB Daten zulässt, sodass 2 GB gespeichert werden.

Was passiert:

  • Der Datentyp ist bis zur Zuweisung noch nicht nvarchar(max). zu @sql1
  • Davor ist es eine Sammlung von Strings, jeder weniger als 4000 (Konstanten)
  • Sie verketten kurze Konstanten mit kurzen Variablen (short =<4000)
  • Sie haben also 4000 Zeichen in @sql1 abgelegt

Stellen Sie also sicher, dass auf der rechten Seite nvarchar(max) steht.

Eine Idee. Die 2. Zeile verkettet nvarchar(max) mit einer Konstante =nvarchar(max)

SET @SQL1 = ''
SET @SQL1 = @SQL1 + 'SELECT DISTINCT Venue...
   ....

Es unterscheidet sich nicht von der ganzzahligen Division, die in jeder Sprache vorkommt.

declare @myvar float
set @myvar = 1/2 --gives zero because it's integer on the right

Die Operatorpriorität (leitet die Datentyppriorität ab) ist immer die letzte "Zuweisung" ... warum sollte es bei Unicode-Strings in SQL Server anders sein?