次のクエリがあるとします。入れ子になったクエリがNULL
(0の結果)を返した場合、ストアドプロシージャは以下のエラーでクラッシュします。私は以下の代替クエリでコードを書き直すことができることを知りましたが、簡単な構文を書こうと思っています。私はこれらのうち約10を持って、いくつかは複数のネストされたクエリを持っています。それらを簡単に書く方法はありますか?私はSQLの専門家ではないので、私は常に提案を探しています!ありがとう。ネストされたクエリが結果を返さない場合は、変数をNULLに設定します。
クエリ(つまり、時々クラッシュする):クエリから
SET @sampleid = (
SELECT
[sampleid]
FROM [sample]
WHERE [identifyingnumber] = @sample_identifyingnumber
エラー:クラッシュすることはありません
Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
代替クエリ:
IF
(
SELECT
COUNT([sampleid])
FROM [sample]
WHERE [identifyingnumber] = @sample_identifyingnumber
) = 0
BEGIN
SET @sampleid = NULL
END
ELSE
BEGIN
SET @sampleid =
(
SELECT
DISTINCT [sampleid]
FROM [sample]
WHERE [identifyingnumber] = @sample_identifyingnumber
)
END
より複雑だ
===============
例:identifyingnumberにsample_tableのレコードを存在しないのレコードをNULLに設定した
SET @testcodeid = (
SELECT
[testcodeid]
FROM [testcode]
WHERE [testcode].[name] = (
SELECT [test_code]
FROM [ws_test_request]
WHERE [client_id] = @clientid
AND [sample_specimen_id] = @sample_identifyingnumber
)
);
を試してみてください。.. 。 –
データを消去したら、 'ON DELETE SET NULL'参照アクションを使用して外部キーを追加することで問題が解決されるようにしてください(または、理想的にはデータベースからNULL可能な列を完全に削除してください)。 – onedaywhen