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

SET TEXTSIZE funktioniert nicht in SQL Server? Überprüfen Sie dies.

Haben Sie SET TEXTSIZE verwendet? Sie möchten die von einer Abfrage zurückgegebenen Daten einschränken, haben aber festgestellt, dass es einfach nicht zu funktionieren scheint? Sie stellen fest, dass Ihr SELECT Abfragen geben weiterhin die gesamte Textmenge zurück, unabhängig von TEXTSIZE Wert?

Weiter lesen. Sie könnten diesen einen offensichtlichen Fehler machen.

Als ich zum ersten Mal auf TEXTSIZE stieß Option, entschied ich mich für einen Schnelltest. Aber es hat nicht funktioniert. Ich habe es mehrmals mit verschiedenen TEXTSIZE versucht Werte, aber nichts schien zu funktionieren.

"Warum funktioniert es nicht?" Ich habe mich gefragt.

Aber dann hat es Klick gemacht. Ich habe die Dokumentation erneut gelesen und festgestellt, dass ich nicht die richtige Zeichenfolgengröße für meine Datentypen verwendet habe.

Die TEXTSIZE funktioniert nur mit den folgenden Datentypen:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • Text
  • ntext
  • Bild

Wenn Sie sich die ersten drei ansehen, stellen Sie fest, dass sie max verwenden für die Argumentation. Dies bedeutet, dass sie die maximale Zeichenketten-/Speichergröße verwenden.

Ich habe es mit Spalten vom Typ nvarchar(100) getestet , varchar(255) usw. Kein Wunder, dass es nicht funktioniert hat.

Beispiel

Hier ist ein Beispiel, um zu demonstrieren, was ich meine.

USE-Test; DROP TABLE IF EXISTS TextSizeTest; CREATE TABLE TextSizeTest ( varchar50 varchar(50), varcharMax varchar(max), nvarcharMax nvarchar(max) ); INSERT INTO TextSizeTestVALUES ( 'Dragonfruit', 'Dragonfruit', 'Dragonfruit' );SET TEXTSIZE 4;SELECT * FROM TextSizeTest;

Ergebnis:

+-------------+-------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+-------------+---------------|| Drachenfrucht | Ziehen Sie | Dr. |+-------------+-------------+---------------+ 

Hier stelle ich die TEXTSIZE ein Wert auf 4 , sondern der vollständige Text von varchar(50) Säule bleibt erhalten. Diese Spalte wird von SET TEXTSIZE nicht beeinflusst . Und genau so soll es funktionieren.

Es sind nur die anderen beiden Spalten betroffen, da sie varchar(max) sind und nvarchar(max) bzw..

Auch der Grund der nvarchar Spalte ist kürzer als varchar liegt daran, dass es zwei Bytes für jedes Zeichen verwendet (im Vergleich zu varchar ist ein Byte pro Zeichen).

Wenn Sie also Probleme mit SET TEXTSIZE haben , überprüfen Sie Ihren Datentyp.