sql >> データベース >  >> RDS >> Sqlserver

SET TEXTSIZEがSQLServerで機能しませんか?これをチェックして。

    SET TEXTSIZEを使用しましたか クエリによって返されるデータを制限しますが、それが機能していないように見えることがわかりましたか? SELECT TEXTSIZEに関係なく、クエリは引き続き全量のテキストを返します 値?

    読む。これは明らかな間違いである可能性があります。

    TEXTSIZEに最初に遭遇したとき オプションで、クイックテストを実行することにしました。しかし、それはうまくいきませんでした。さまざまなTEXTSIZEで何度か試しました 値が、何も機能していないようでした。

    「なぜそれが機能しないのですか?」疑問に思いました。

    しかし、それからそれはクリックしました。ドキュメントを読み直して、データ型に正しい文字列サイズを使用していないことに気付きました。

    TEXTSIZE 次のデータ型でのみ機能します:

    • varchar(max)
    • nvarchar(max)
    • varbinary(max)
    • テキスト
    • ntext
    • 画像

    最初の3つを見ると、maxを使用していることに注意してください。 議論のために。これは、最大の文字列/ストレージサイズを使用することを意味します。

    タイプnvarchar(100)の列に対してテストしていました 、 varchar(255) 、など。それが機能していなかったのも不思議ではありません。

    これが私の意味を示す例です。

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

    結果:

    +-------------+--------------+---------------+
    | varchar50   | varcharMax   | nvarcharMax   |
    |-------------+--------------+---------------|
    | Dragonfruit | Drag         | Dr            |
    +-------------+--------------+---------------+
    

    ここでは、TEXTSIZEを設定します 4の値 、ただし、varchar(50)の全文 カラムはそのまま残ります。この列はSET TEXTSIZEの影響を受けません 。そして、それはまさにそれが機能することになっている方法です。

    varchar(max)であるため、影響を受けるのは他の2つの列だけです。 およびnvarchar(max) それぞれ。

    また、 nvarcharの理由 列がvarcharよりも短い これは、各文字に2バイトを使用するためです( varchar と比較して) は1文字あたり1バイトです。

    したがって、SET TEXTSIZEで問題が発生した場合 、データ型を確認してください。


    1. 地理的に分散したMariaDBクラスターを設計する方法

    2. 更新コマンドでのSQLServerエラー-現在のコマンドで重大なエラーが発生しました

    3. PostgreSQLの日付に週を追加

    4. PostgreSQL用のトップPGクラスタリング高可用性ソリューション