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
一方、クエリで返される該当するすべての列に適用されます。また、別の値に設定されるまで、すべてのクエリに適用されます。