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

T-SQLPRINTステートメントの概要

    PRINTステートメントは、どのプログラミング言語でも重要です。これにより、実行しているルーチンまたはプログラムが、ある種のログまたは情報をコンソールにダンプして表示および分析できるようになります。 PRINTは、アプリケーションコード内の問題をデバッグするのに役立ちます この記事では、PRINTステートメントを効果的に使用して、複雑なT-SQLストアドプロシージャとコードのデバッグを支援する方法について説明します。

    Sを取得する SQLPRINTでtarted

    PRINTを使用するために必要なのは、コンソールに出力する値の前にコマンドPRINTを追加することだけです。この例では、コンソールはSQL Server Management Studioになります。これは、ほとんどのSQLServer開発者が精通している主要な開発環境です。 SSMS内では、クエリを実行した後、[メッセージ]タブでPRINTステートメントを表示できます。

    結果には、データベーステーブルからクエリされたSQLが表示されます。

    メッセージにはPRINTステートメントが表示されます

    次のコマンドをバッチで実行してみましょう:

    --RUN A SELECT TO VIEW THE "RESULTS" TAB
    SELECT 1
    
    --RUN PRINT IN LOWERCASE
    print 'hello coding sight reader'
    
    --RUN PRINT IN UPPERCASE
    PRINT 'HELLO CODING SIGHT READER'
    

    このスクリプトは次の点を示しています。

    • これらのSELECTとPRINTは一緒に実行できます
    • SELECTとPRINTの結果はSSMSの別々のタブに表示されます
    • SQLServerではPRINTステートメントで大文字と小文字が区別されません

    簡単な例

    T-SQL変数からの印刷

    次の例では、@PRINTVAR変数は「PRINTVAR」の文字列値に設定されています。次に、その変数は、値をCHAR(13)と連結することにより、管理コンソールの2つの別々の行に出力されます。

    
    --SETING A VARIABLE AND PRINTING IT
    DECLARE @PRINTVAR VARCHAR(500)
    SET @PRINTVAR = 'PRINTVAR'
    PRINT @PRINTVAR + CHAR(13) + @PRINTVAR --PRINT THE SAME VARIABLE TWICE ON DIFFERENT LINES.
    

    その他のDの印刷 ata T ypes

    NVARCHARは、SSMSでコンソールに印刷するときに必要となるターゲットデータ型です。したがって、他のデータ型は、キャストまたは変換のいずれかを使用してNVARCHARに明示的にキャストされる可能性があります。

    DECLARE @XML XML
    
    SET @XML = '<root>
    <A>*A*</A>
    <B>*B*</B>
    <C>*C*</C>
    <body>*Body*</body>
    </root>'
    PRINT CAST(@XML as NVARCHAR(MAX))
    

    印刷a LのT-SQL変数 おっと

    以下の例では、タイプ@Iの変数は、ループの各反復中に増加し、出力されます。これは、ルーチン内の変更を監視するためのPRINTユースケースの良い例です。

    --ITERATE IN A WHILE LOOP AND PRINT EACH ITERATION.
    DECLARE @I INT = 1
    
    WHILE(@I <= 20)
    	BEGIN
    		PRINT @I
    		SET @I += 1
    	END
    

    複雑な例

    T-SQLでPRINTステートメントの使用を開始する方法のいくつかの簡単な概念について説明しました。より堅牢で複雑な例を見てみましょう。 2つの整数値を受け入れ、それら2つの値を一緒に乗算するストアドプロシージャを作成します。結果に答えが返されますが、PRINTステートメントを使用してメッセージに掛け算の九九も表示します。

    また、九九に影響を受ける1行のメッセージが表示されないように、NOCOUNTをオンに設定します。

    CREATE PROC SPX_MULTIPLY_VALUES(@A INT, @B INT)
    AS
    
    SET NOCOUNT ON --REMOVE THE 1 ROWS AFFECTED IN MESSAGE
    SELECT @A * @B --RETURN ANSWER
    
    --RETURN MULTIPLICATION TABLE
    PRINT  '1  '+	'2  '+	'3  '+	'4  '+	'5  '+	'6  '+	'7  '+	'8  '+	'9  '+	'10 '
    PRINT  '2  '+	'4  '+	'6  '+	'8  '+	'10 '+	'12 '+	'14 '+	'16 '+	'18 '+	'20 '
    PRINT  '3  '+	'6  '+	'9  '+	'12 '+	'15 '+	'18 '+	'21 '+	'24 '+	'27 '+	'30 '
    PRINT  '4  '+	'8  '+	'12 '+	'16 '+	'20 '+	'24 '+	'28 '+	'32 '+	'36 '+	'40 '
    PRINT  '5  '+	'10 '+	'15 '+	'20 '+	'25 '+	'30 '+	'35 '+	'40 '+	'45 '+	'50 '
    PRINT  '6  '+	'12 '+	'18 '+	'24 '+	'30 '+	'36 '+	'42 '+	'48 '+	'54 '+	'60 '
    PRINT  '7  '+	'14 '+	'21 '+	'28 '+	'35 '+	'42 '+	'49 '+	'56 '+	'63 '+	'70 '
    PRINT  '8  '+	'16 '+	'24 '+	'32 '+	'40 '+	'48 '+	'56 '+	'64 '+	'72 '+	'80 '
    PRINT  '9  '+	'18 '+	'27 '+	'36 '+	'45 '+	'54 '+	'63 '+	'72 '+	'81 '+	'90 '
    PRINT  '10 '+	'20 '+	'30 '+	'40 '+	'50 '+	'60 '+	'70 '+	'80 '+	'90 '+	'100 '
    
    RETURN
    
    --EXECUTE THE PROCEDURE FOR 1 X 8
    EXEC dbo.SPX_MULTIPLY_VALUES 1,8
    

    実際のプロシージャ呼び出しの結果は、2つの整数を単純に乗算します。 PRINTステートメントも同時に実行され、数学をチェックできる掛け算の九九を提供します。実際、1 x 8 =8です。これは、printステートメントを介してストアドプロシージャに詳細を追加する良い例です。

    ユースケース

    追加のログ

    ここでの例はそれほど複雑ではありませんが、現実の世界では、ストアドプロシージャでいくつかの複雑なロジックに遭遇する可能性があります。 PRINTステートメントは、これらの複雑さを絞り込み、変数とその内部での出来事についての洞察を提供するのに役立ちます。疑わしい場合は、PRINTステートメントを追加してコメントアウトできますが、提供された洞察により、後で時間と労力を節約できます。

    概要

    T-SQLのPRINTステートメントについて説明しました。 SQL Server Management Studioで取得したり、SQLServerデータベースから読み取っているクライアントアプリケーションに返したりできるメッセージを生成します。 T-SQL変数を出力するためのアプローチと、その他のデータ型に関する考慮事項について説明しました。 PRINTステートメントをループで使用し、より複雑なストアドプロシージャを使用して、PRINTが日常の運用方法で提供できる値を示しました。


    1. 複数のJOINがクエリに適していない、またはオプティマイザの邪魔にならない理由

    2. Oracleの同時実行性はSQLServerよりも優れていますか?

    3. UTF-8文字エンコードの戦いjson_encode()

    4. phpmyadminの結果で推定行数が大きく異なるのはなぜですか?