检查SELECT是否在存储过程中返回任何行

mut*_*y91 20 sql sql-server stored-procedures

我正在编写一个基本SELECT查询,例如:

SELECT id, pname, pnumber 
FROM tableName 
WHERE pnumber IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

我想INSERT通过使用它的结果来执行SELECT:

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

我的问题是,我该如何检查**the above SELECT query returned 0 rows**

Aar*_*and 31

IF NOT EXISTS (SELECT ...)
BEGIN
  INSERT ...
END
Run Code Online (Sandbox Code Playgroud)

你也可以这样做,如果你希望查询可能经常返回行(特别是很多行),这可能提供更好的短路机会:

IF EXISTS (SELECT ...)
BEGIN
  PRINT 'Do nothing.';
END
ELSE
BEGIN
  INSERT ...
END
Run Code Online (Sandbox Code Playgroud)

...因为它IF EXISTS会在匹配到第一行后立即返回.

我不建议@@ROWCOUNT仅使用,因为您每次都必须实现(并忽略)完整的结果集.


Sun*_*mar 5

在MySQL中检查编号。上次选择查询返回的行数

select FOUND_ROWS();
Run Code Online (Sandbox Code Playgroud)