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

SET TEXTSIZEを使用して、SQLServerの各行に返されるデータを制限します

    SQL Serverでは、SET TEXTSIZE ステートメントは、 varchar(max)のサイズを指定します 、 nvarchar(max) varbinary(max)テキスト ntext 、および画像 SELECTによって返されるデータ ステートメント。

    マイクロソフトは、テキスト ntext 、および画像 SQL Serverの将来のバージョンで削除されるため、新しい開発作業でこれらのデータ型を使用することは避け、現在それらを使用しているアプリケーションを変更して varchar(max)を使用するように計画する必要があります。 、 nvarchar(max) 、または varbinary(max) 代わりに。

    例1-基本的な使用法

    TEXTSIZEの設定例を次に示します。 値。

    SET TEXTSIZE 2048;
    

    TEXTSIZEを設定します 2048バイトまで。

    例2–TEXTSIZE値を確認する

    現在のTEXTSIZEを確認できます @@TEXTSIZEの値 :

    SELECT @@TEXTSIZE AS [Text Size];
    

    結果:

    +-------------+
    | Text Size   |
    |-------------|
    | 2048        |
    +-------------+
    

    例3–クエリ結果への影響

    これは、TEXTSIZEがどのように機能するかを示す例です。 値は、SELECTで返される結果に影響を与える可能性があります クエリ。

    まず、テーブルを作成し、テキストを挿入してから選択します。

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

    結果(通常):

    +-------------+--------------+---------------+
    | varchar50   | varcharMax   | nvarcharMax   |
    |-------------+--------------+---------------|
    | Dragonfruit | Dragonfruit  | Dragonfruit   |
    +-------------+--------------+---------------+
    

    これは私たちが通常期待することです。テキストの各行が2048バイト(TEXTSIZEを設定したもの)未満であるため、各列内に全文が返されます。 前の例ではに)。

    しかし、TEXTSIZEを減らすとどうなりますか 値:

    SET TEXTSIZE 4;
    SELECT * FROM TextSizeTest;
    

    結果:

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

    最初の列は「最大」列ではないため、影響を受けません。つまり、 varchar(50) varchar(max)ではありません 。 TEXTSIZE オプションは、maxで定義された列にのみ影響します 。

    2番目の列は、最初の4文字を返します。これは、TEXTSIZEを設定したためです。 値を4に設定し、最初の4文字は4バイトを使用しています。

    3番目の列は、最初の2文字のみを返します。これは、 nvarcharであるためです。 桁。この場合、最初の2文字は4バイトを使用しています。

    例4–値をリセットする

    注意すべきことの1つは、SET TEXTSIZE 0を指定することです。 実際には、デフォルト値の4096に「リセット」されます。

    SET TEXTSIZE 0;
    SELECT @@TEXTSIZE AS [@@TEXTSIZE];
    SELECT * FROM TextSizeTest;
    

    結果:

    +--------------+
    | @@TEXTSIZE   |
    |--------------|
    | 4096         |
    +--------------+
    (1 row affected)
    +-------------+--------------+---------------+
    | varchar50   | varcharMax   | nvarcharMax   |
    |-------------+--------------+---------------|
    | Dragonfruit | Dragonfruit  | Dragonfruit   |
    +-------------+--------------+---------------+
    (1 row affected)
    

    1. SQL Server:((int)year、(int)month、(int)day)を日時に変換します

    2. PostgreSQL9.6beta1用のPGLogical1.1パッケージ

    3. プリペアドステートメントでワイルドカードのように使用する

    4. Oracle CLOBは4000文字を超えて挿入できませんか?