この単純なPRINT
ステートメントの出力はありません。何が欠けていますか?
DECLARE @team varchar(20)
BEGIN
SELECT @team = TEAM
FROM DISTRIB_LINE
PRINT 'value is' + @team
END
式が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、および場合によっては追加のフィルターとの組み合わせに関してもあります。
PRINT
は、結果セットではなくメッセージを出力します。次のようなものを試してください:
DECLARE @team varchar(20)
SELECT TOP 1 @team = TEAM
FROM DISTRIB_LINE
SELECT @team AS Team
私の例にはTOP
が含まれています。これは、@team
が単一の値を受け取ることを確認したためです。ただし、その値は明確ではありません(非決定的)。最も確実なのは、ORDER BY
句と、単一レコードを強制するWHERE
を使用することです。