24

次のような基本的なSELECTクエリを作成しています。

SELECT id, pname, pnumber 
FROM tableName 
WHERE pnumber IS NOT NULL

INSERT次に、その結​​果を使用して次のように実行したいと思いますSELECT

IF {**the above SELECT query returned 0 rows**}
BEGIN
    INSERT INTO tableName (pname,pnumber) VALUES ('bob', '38499483')
END

私の質問は、どうすれば を確認でき**the above SELECT query returned 0 rows**ますか?

4

5 に答える 5

36
IF NOT EXISTS (SELECT ...)
BEGIN
  INSERT ...
END

クエリが頻繁に行 (特に多数の行) を返すことが予想される場合は、これを行うこともできます。これにより、短絡する可能性が高くなります。

IF EXISTS (SELECT ...)
BEGIN
  PRINT 'Do nothing.';
END
ELSE
BEGIN
  INSERT ...
END

...IF EXISTSなので、一致する最初の行にヒットした直後に戻ります。

@@ROWCOUNT毎回完全な結果セットを具体化 (および無視) する必要があるという理由だけで使用することはお勧めしません。

于 2013-10-10T17:02:34.313 に答える
8

MySQL では、最後の SELECT クエリから返された行数を次のように確認できます。

SELECT FOUND_ROWS();
于 2015-02-16T12:15:18.507 に答える
2

コードは次のとおりです。

EXEC(SELECT * FROM Table_Name)
    IF (@@ROWCOUNT>1)    --@@ROWCOUNT is the count number of return's rows
    BEGIN
       // code here
    END
于 2019-11-13T09:17:59.373 に答える