web-dev-qa-db-ja.com

SQL PRINTステートメントは何も出力しません

この単純なPRINTステートメントの出力はありません。何が欠けていますか?

sqlfiddleで提供されるデータ

DECLARE @team varchar(20)

BEGIN
   SELECT @team = TEAM
   FROM DISTRIB_LINE 
   PRINT 'value is' + @team
END
5
user146601

式がnullと評価された場合、PRINTステートメントは何も出力しません。どうやら@teamは前のステートメントの結果としてnullになり、PRINTは何も出力しなくなりました。変数がnullの場合でも印刷したい場合は、ISNULLまたはCOALESCEを使用します。

PRINT 'value is ' + ISNULL(@team, '(null)');

SELECTにフィルターを追加して、NULLがスキップされるようにすることもできます(ifスキップしたい場合、つまり):

SELECT @team = TEAM
FROM DISTRIB_LINE
WHERE TEAM IS NOT NULL;

ただし、テーブルに行がない場合、またはすべてのTEAM値がnullの場合、このステートメントは割り当てを行いません。この場合、PRINTが何も出力しない場合は、SELECTの前でも@teamがnullだったことを意味します。したがって、以前の方法を適用する必要があります。

また、テーブルに多くの行がある場合、この方法で変数を割り当てることはお勧めできません。最終的に割り当てられる値を制御できないためです。したがって。 Alexeiにはポイントがあります TOPの使用、ORDER BY、および場合によっては追加のフィルターとの組み合わせに関してもあります。

9
Andriy M

PRINTは、結果セットではなくメッセージを出力します。次のようなものを試してください:

DECLARE @team varchar(20)
SELECT TOP 1 @team = TEAM
FROM DISTRIB_LINE 

SELECT @team AS Team

私の例にはTOPが含まれています。これは、@teamが単一の値を受け取ることを確認したためです。ただし、その値は明確ではありません(非決定的)。最も確実なのは、ORDER BY句と、単一レコードを強制するWHEREを使用することです。

6
Alexei

あなたのコードは私のマシンで動作し、印刷されます

値は800

SQLFiddleは、出力を表示しないようです。

dbfiddle でサンプルを試すと、正しい出力が得られます。

PRINT 'A'; SQLFiddleでは何も出力しません( ここ を参照)。DBFiddleでは 行う

SQLFiddleの実装の詳細は明確ではありませんが、印刷ステートメントを抑制するだけだと思います。