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

Wie speichert man eine String-Variable, die größer als varchar(max) ist?

Im Ernst - VARCHAR(MAX) kann bis zu 2 GB Daten speichern - nicht nur 8000 Zeichen.....

Versuchen Sie Folgendes:

DECLARE @myVar VARCHAR(MAX) = ''

DECLARE @ix INT = 1

WHILE @ix < 1000
BEGIN
    set @myVar = @myVar + CAST('bla bla bla' AS VARCHAR(MAX))
    SET @ix = @ix + 1
END

SELECT DATALENGTH(@myvar)

Dadurch wird ein höherer Wert zurückgegeben als 8000 Zeichen nach 1000 Iterationen.

Der Punkt ist:wenn Sie varchar(max) verwenden , müssen Sie sicherstellen, dass Sie immer casten all deine Strings zu varchar(max) ausdrücklich - wie ich es in diesem Beispiel getan habe. Andernfalls greift SQL Server auf "normales" varchar zurück Verarbeitung, und das ist in der Tat auf 8000 Zeichen begrenzt....