web-dev-qa-db-ja.com

列に8000バイトを超えるデータを格納する

SQL Serverデータベースのテーブルの1つに8000文字を超える列があります。 SQL Serverの列の最大許容文字長は8000なので、8000文字を超えるデータを持つデータをどのように格納できますか?

2
Mohan Seth

SQL Serverの単一の列に8000バイトを超える値を格納する場合は、2つの考慮事項があります。

まず、列はこの長さの値を保持できる必要があります。文字列の場合、これは通常、列にvarchar(max)(シングルバイト文字の場合)またはnvarchar(max)(Unicodeの場合)のタイプを指定することによって行われます。例として、次のテーブル変数では、列に8000バイトを超える文字列を使用できます。

_DECLARE @Example AS table
(
    LongColumn varchar(max) NULL
);
_

次に、この列に保存しようとする値が、たとえば次のように入力されていることを確認する必要があります。 varchar(max)。たとえば、次の結果は切り捨てられます。これは、構築された文字列が暗黙的にvarchar(varchar(max)ではない)として型指定され、したがって8000バイトに制限されるためです。

_DECLARE @Example AS table
(
    LongColumn varchar(max) NULL
);

INSERT @Example
    (LongColumn)
VALUES
    (REPLICATE('x', 9000)); -- 'x' is implicitly varchar

SELECT 
    E.LongColumn, 
    DATALENGTH(E.LongColumn)
FROM @Example AS E;
_

次のコードは、varchar(max)型の文字列を作成するため、正しく機能します。

_DECLARE @Example AS table
(
    LongColumn varchar(max) NULL
);

INSERT @Example
    (LongColumn)
VALUES
    (REPLICATE(CONVERT(varchar(max), 'x'), 9000));

SELECT 
    E.LongColumn, 
    DATALENGTH(E.LongColumn)
FROM @Example AS E;
_

Books Onlineの charおよびvarchar および ncharおよびnvarchar を参照してください。

6
Paul White 9