Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pour Nvarchar(Max), je n'obtiens que 4000 caractères dans TSQL ?

Vous l'avez déclaré comme nvarchar (max) qui autorise 2 Go de données afin de stocker 2 Go.

Que se passe-t-il :

  • Le type de données n'est pas encore nvarchar(max) jusqu'à affectation à @sql1
  • Avant cela, c'est une collection de chaînes, chacune inférieure à 4 000 (constantes)
  • Vous concaténez des constantes courtes avec des variables courtes (short =<4000)
  • Vous avez donc 4 000 caractères mis dans @sql1

Donc, vous devez vous assurer que vous avez nvarchar(max) sur le côté droit.

Une idée. La 2ème ligne concatène nvarchar(max) avec une constante =nvarchar(max)

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

Ce n'est pas différent de la division entière qui se produit dans chaque langue.

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

La priorité des opérateurs (infère la priorité des types de données) est toujours "l'affectation" en dernier... pourquoi les chaînes Unicode dans SQL Server devraient-elles être différentes ?