SET TEXTSIZEに精通している可能性があります SQL Serverのステートメント。これにより、SELECTで返されるデータの量を制限できます。 クエリ。
おそらく、その結果はLEFT()とまったく同じであることがわかります。 特定のクエリを実行するとき。どちらが疑問を投げかけます:これらの2つのオプションの間に違いはありますか?
これら2つのオプションには間違いなく違いがあります。両方の関数が完全に異なる結果を返す場合があります。また、それらの動作方法や、使用できるデータの種類にも違いがあります。
定義
まず、それぞれが何をするのかを見てみましょう。
-
LEFT() - 指定された文字数の文字列の左側を返します。
-
SET TEXTSIZE - varchar(max)のサイズを指定します 、 nvarchar(max) 、 varbinary(max) 、テキスト 、 ntext 、および画像
SELECTによって返されるデータ ステートメント。
これを詳しく調べてみましょう。
文字とデータサイズ
各定義の文言に注意してください。特に、「文字」と「サイズ」および「データ」という言葉。
-
LEFT()文字の数を明示的に指定できます 返されます。 -
SET TEXTSIZEサイズを指定できます 返されたデータの。
データ型によって結果が異なるため、これは重要な違いです。文字が異なれば、必要なストレージサイズも異なります。 1つの文字が1バイトを使用し、別の文字が2バイトを使用する場合があります。
LEFT()の使用 使用するバイト数に関係なく、文字数を指定できます。
SET TEXTSIZE 一方、バイト数を指定できます 戻る–しない 数字の文字。
nvarchar(max)を使用してデータが保存されている場合 たとえば、SET TEXTSIZE LEFT()の半分の文字数を返します します。
例:
CREATE TABLE TextSizeTest (
varchar50 varchar(50),
varcharMax varchar(max),
nvarcharMax nvarchar(max)
);
INSERT INTO TextSizeTest
VALUES (
'Dragonfruit',
'Dragonfruit',
'Dragonfruit'
);
SET TEXTSIZE 50;
SELECT
LEFT(varchar50, 4) AS varchar50,
LEFT(varcharMax, 4) AS varcharMax,
LEFT(nvarcharMax, 4) AS nvarcharMax
FROM TextSizeTest;
SET TEXTSIZE 4;
SELECT * FROM TextSizeTest;
結果:
+-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Drag | Drag | Drag | +-------------+--------------+---------------+ (1 row affected) Commands completed successfully. +-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Dragonfruit | Drag | Dr | +-------------+--------------+---------------+ (1 row affected)
最初の結果はLEFT()の場合です 。 3つのデータタイプとサイズすべてで機能します。指定された正確な文字数を返します。
2番目の結果は、SET TEXTSIZEの場合です。 。 varchar(50)には影響しません 結果。他の2つにのみ影響します。しかし、それはそれらに異なった影響を及ぼします。 varchar(max)の場合 、各文字は1バイトを使用するため、指定されたTEXTSIZEと同じ数の文字が返されます。 。 nvarchar(max)の場合 それは別の話です。各文字は2バイトを使用するため、返される文字数は半分になります。
ただし、LEFT()によって返される結果 SET TEXTSIZEの影響を受ける可能性があります 。 LEFT()を実行すると もう一度クエリを実行しますが、その前にSET TEXTSIZE 2を付けます 、これを取得します:
SET TEXTSIZE 2; SELECT LEFT(varchar50, 4) AS varchar50, LEFT(varcharMax, 4) AS varcharMax, LEFT(nvarcharMax, 4) AS nvarcharMax FROM TextSizeTest;
結果:
+-------------+--------------+---------------+ | varchar50 | varcharMax | nvarcharMax | |-------------+--------------+---------------| | Drag | Dr | D | +-------------+--------------+---------------+
最大データサイズと固定データサイズ
もう1つの違いは、SET TEXTSIZE varchar(max)でのみ機能します 、 nvarchar(max) 、 varbinary(max) 、テキスト 、 ntext 、および画像 データ。 maxに注意してください 部。固定データサイズ(varchar(255)など)を使用する場合 例)、SET TEXTSIZE 動作しません。
LEFT() 一方、テキストを除くすべての文字データで機能します およびntext 。
これらの違いは、前の例で確認できます。 varchar(50) データはLEFT()の影響を受けました ただし、SET TEXTSIZEではありません 。
LEFT()はより具体的です
もう1つの違いは、LEFT() 指定した列(または定数または変数)にのみ適用されます。複数の列/式に適用する場合は、式ごとに再度含める必要があります。後続のクエリと同じです。
SET TEXTSIZE 一方、クエリで返される該当するすべての列に適用されます。また、別の値に設定されるまで、すべてのクエリに適用されます。