データベースを検索しているときに、特定のアイテムが存在しないことがわかった場合はINSERTステートメントを実行し、このアイテムが1つ以上見つかった場合は別のINSERTステートメントを実行します。
IF ELSE式の使用方法が完全にはわかりません。
これまでのところ、ターゲットデータが表示される回数をカウントするステートメントがあります。 0より大きい場合はTRUEを出力し、そうでない場合はFALSEを出力します。これを使用して2つの異なるINSERTステートメントを実行する方法を理解するのに役立つ例を見つけることができません。
ここに私がこれまでに持っているものがあります:
SELECT CASE WHEN COUNT(*)>0 THEN 'TRUE' ELSE 'FALSE' END
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
)
ニーズに応じて、次の2つの方法があります。
IF EXISTS (SELECT * FROM TABLE WHERE COLUMN = 'SOME VALUE')
--INSERT SOMETHING
ELSE
--INSERT SOMETHING ELSE
またはもう少し
DECLARE @retVal int
SELECT @retVal = COUNT(*)
FROM TABLE
WHERE COLUMN = 'Some Value'
IF (@retVal > 0)
BEGIN
--INSERT SOMETHING
END
ELSE
BEGIN
--INSERT SOMETHING ELSE
END
0を超えるCountに基づいて検索する必要がある限り、次のようにEXISTSを使用することをお勧めします。
IF EXISTS (SELECT 1 FROM INCIDENTS WHERE [Some Column] = 'Target Data')
BEGIN
-- TRUE Procedure
END
ELSE BEGIN
-- FALSE Procedure
END
IF exists
IF exists (select * from table_1 where col1 = 'value')
BEGIN
-- one or more
insert into table_1 (col1) values ('valueB')
END
ELSE
-- zero
insert into table_1 (col1) values ('value')
あなたが何を意味するかはあまり明確ではありません
"I cant find any examples to help me understand how I can use this to run 2 different statements:"
。 CASE
のようなSWITCH
を使用していますか?
select case when totalCount >= 0 and totalCount < 11 then '0-10'
when tatalCount > 10 and totalCount < 101 then '10-100'
else '>100' end as newColumn
from (
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) A
これをコーディングする方法はたくさんありますが、ここに考えられる方法の1つがあります。私はMS SQLを想定しています
行数を取得することから始めます(別の 簡単な例 )、次にif/elseを実行します
-- Let's get our row count and assign it to a var that will be used
-- in our if stmt
DECLARE @HasExistingRows int -- I'm assuming it can fit into an int
SELECT @HasExistingRows = Count(*)
ELSE 0 -- false
FROM
INCIDENTS
WHERE {Your Criteria}
GROUP BY {Required Grouping}
これでIf/Else Logicを実行できます MSDN Docs
-- IF / Else / Begin / END Syntax
IF @HasExistingRows = 0 -- No Existing Rows
BEGIN
{Insert Logic for No Existing Rows}
END
ELSE -- existing rows are found
BEGIN
{Insert logic for existing rows}
END
別のより速い方法(マフムード・ガマルのコメントに触発された):
変数の作成/割り当て全体を忘れてください-"EXISTS"を参照してください- MSDN Docs 2 。
IF EXISTS ({SELECT Query})
BEGIN
{INSERT Version 1}
END
ELSE
BEGIN
{INSERT version 2}
END
1つの明らかな解決策は、2つの個別のクエリを実行し、最初にcount = 1のすべてのアイテムを選択して挿入を実行し、次にcount> 1のアイテムを選択して2番目の挿入を実行することです。
2番目のステップとして、2つの挿入が類似している場合、おそらくそれらを1つのクエリに結合できます。
別の可能性は、カーソルを使用してレコードセットをループし、各行に必要なロジックを実行することです。
以下を使用するだけです。
IF((SELECT count(*)FROM table)= 0)BEGIN
....
終わり
これがSQL Serverにある場合、構文は正しいです。ただし、ネストされたクエリの合計カウントとしてCOUNT(*)を参照する必要があります。これにより、必要なものが得られます。
SELECT CASE WHEN TotalCount >0 THEN 'TRUE' ELSE 'FALSE' END FROM
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) DerivedTable
これを使用して、TotalCountを変数に割り当て、IF ELSEステートメントを使用してINSERTステートメントを実行できます。
DECLARE @TotalCount int
SELECT @TotalCount = TotalCount FROM
(
SELECT [Some Column], COUNT(*) TotalCount
FROM INCIDENTS
WHERE [Some Column] = 'Target Data'
GROUP BY [Some Column]
) DerivedTable
IF @TotalCount > 0
-- INSERT STATEMENT 1 GOES HERE
ELSE
-- INSERT STATEMENT 2 GOES HERE