Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Per Nvarchar(Max) ricevo solo 4000 caratteri in TSQL?

Lo hai dichiarato come nvarchar(max) che consente 2 GB di dati, quindi memorizzerà 2 GB.

Cosa sta succedendo:

  • Il tipo di dati non è ancora nvarchar(max) fino all'assegnazione a @sql1
  • Prima di ciò, è una raccolta di stringhe, ciascuna inferiore a 4000 (costanti)
  • Stai concatenando costanti brevi con variabili brevi (short =<4000)
  • Quindi hai 4000 caratteri inseriti in @sql1

Quindi, assicurati di avere nvarchar(max) sul lato destro.

Un'idea. La seconda riga concatena nvarchar(max) con una costante =nvarchar(max)

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

Non è diverso dalla divisione intera che avviene in ogni lingua.

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

La precedenza dell'operatore (deduce la precedenza del tipo di dati) è sempre "assegnazione" per ultima... perché le stringhe Unicode in SQL Server dovrebbero essere diverse?