sql >> Databáze >  >> RDS >> Sqlserver

SET TEXTSIZE Nefunguje v SQL Server? Koukni na tohle.

Použili jste SET TEXTSIZE omezit data vrácená dotazem, ale zjistili jste, že to prostě nefunguje? Zjišťujete, že váš SELECT dotazy nadále vracejí celé množství textu bez ohledu na TEXTSIZE hodnotu?

Číst dál. Možná děláte tuto zjevnou chybu.

Když jsem poprvé narazil na TEXTSIZE možnost, rozhodl jsem se provést rychlý test. Ale nefungovalo to. Zkoušel jsem to několikrát s různými TEXTSIZE hodnoty, ale zdálo se, že nic nefunguje.

"Proč to nefunguje?" Přemýšlel jsem.

Ale pak to klaplo. Znovu jsem si přečetl dokumentaci a uvědomil jsem si, že pro své datové typy nepoužívám správnou velikost řetězce.

TEXTSIZE funguje pouze na následujících typech dat:

  • varchar(max)
  • nvarchar(max)
  • varbinary(max)
  • text
  • ntext
  • obrázek

Pokud se podíváte na první tři, všimněte si, že používají max za argument. To znamená, že používají maximální velikost řetězce/úložiště.

Testoval jsem to proti sloupcům typu nvarchar(100) , varchar(255) atd. Není divu, že to nefungovalo.

Příklad

Zde je příklad, který demonstruje, co tím myslím.

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;

Výsledek:

+-------------+--------------+---------------+| varchar50 | varcharMax | nvarcharMax ||-------------+--------------+--------------|| Dragonfruit | Přetáhnout | Dr |+-------------+--------------+---------------+ 

Zde nastavím TEXTSIZE hodnotu na 4 , ale celý text varchar(50) sloup zůstává nedotčen. Tento sloupec není ovlivněn SET TEXTSIZE . A přesně tak to má fungovat.

Jsou ovlivněny pouze další dva sloupce, protože jsou varchar(max) a nvarchar(max) respektive.

Také důvod nvarchar sloupec je kratší než varchar je to proto, že používá dva bajty pro každý znak (ve srovnání s varchar ‘je jeden bajt na znak).

Pokud tedy narazíte na problémy s SET TEXTSIZE , zkontrolujte typ dat.


  1. SQLAlchemy PŘI AKTUALIZACI DUPLIKÁTNÍHO KLÍČE

  2. Je středník nezbytný v SQL?

  3. EXPORTOVAT JAKO VLOŽIT VÝKAZY:Ale v SQL Plus řádek přepíše 2500 znaků!

  4. Brána PL/SQL v R11i