0

次の式/サブクエリによって返された値を変数にロードする方法がわかりません。

declare @var int
set @var = null

  IF @var IS NULL
SELECT @var = t.col_one
    FROM my_table t
    WHERE t_datetime = (SELECT MAX(t_datetime) FROM t WHERE t.col_two = 1)

式の結果を変数にロードするにはどうすればよいですか?

以下の回答を反映するようにコードを更新しましたが、問題は解決していません。エラーはありませんが、後で@var変数を呼び出したときにsprocでまだnullです。つまり、これはまだ機能していません。私が使用しているコードの後半:

t.col_three = @var

さらにt.col_three = @var or @var is null、変数をnullにすることはできないため、使用していません:

4

3 に答える 3

3

クエリを以下に変更してみてください。サブクエリを使用せずに必要なものを達成し、クエリとは異なり、常に最大 1 つの結果を返します。

Select Top 1 @var = t.col_one
From my_table t
Where t.col_two = 1
Order By t.t_datetime Desc
于 2012-11-16T22:17:56.100 に答える
1

試す

SELECT @var = table.col from table ...

また、クエリが 1 行のみを返すようにしてください。

たとえば、クエリの直前に次のようなものを追加します。

DECLARE @count INT
SELECT @count = COUNT(*) FROM t WHERE t.col_two = 1
IF (@count = 0) RAISERROR('no rows found',16,1)

エラーがスローされるかどうかを確認します。

于 2012-11-16T21:34:34.387 に答える
0

クエリが 1 行のみを返す限り、SET または SELECT は正常に機能します。MAX などの集計関数を使用して行を 1 つだけにするか、SELECT TOP 1 を使用して行を 1 つだけ返すようにすることができます。ただし、TOP 1 を使用する場合は、必要な行が得られるようにクエリを並べ替えるように注意してください。

このように変数を設定するとき、私は保護手段としてのみ TOP 1 を使用することを好みます。このような操作は実際には離散値を探しているため、クエリもそのように記述する必要があります。

于 2012-11-16T21:44:14.977 に答える