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

问题描述

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

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

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

…因为IF EXISTS它将在到达匹配的第一行后立即返回。

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

解决方法

我正在写一个基本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**