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?