当前位置: 首页 > 面试题库 >

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

张敏达
2023-03-14
问题内容

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


问题答案:
IF NOT EXISTS (SELECT ...)
BEGIN
  INSERT ...
END

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

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

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

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



 类似资料:
  • 问题内容: 如何检查存储过程或查询是否仍在SQL Server中运行? 主意 我曾经想过要在过程开始时在哪里写日志,并在过程结束时将日志删除。 缺陷: 使用过程监控器 我希望能有一个可以合并为一个存储过程的解决方案和/或,作为输入,所以使用SQL Server的界面将无法正常工作跟踪程序或解决方案。 更新#1 用法示例: 该过程应该像 并在运行时(20秒内)返回true,然后在函数失败或系统重新启

  • 问题内容: 如果“表”没有行。什么是最简单的检查方法? 问题答案: 您可以使用mysql_num_rows($ results) 来检查是否返回了0行,或者使用以下更快的替代方法:

  • 我有一个存储过程在SQL服务器2012其中有一些参数包括表类型参数以及SQL服务器2012不支持表类型参数我写了另一个存储过程通过设置默认值此表类型参数和只有varchar参数为新过程 我已经编写了一个java代码来执行这个存储过程,我能够建立连接,但是执行()方法总是返回false 当我在Management Studio中执行相同的存储过程时,它会返回正确的结果表。

  • 问题内容: 如果我具有流程的PID,则os.FindProcess是否足以测试该流程的存在?我的意思是,如果返回,我是否可以认为它已终止(或被杀死)? 编辑: 我刚刚写了一个包装函数(旧式bash流程测试)。这可以正常工作,但是如果有其他解决方案(使用go库完成),我仍然很高兴。 问题答案: 这是查看进程是否处于活动状态的传统的Unix方式-向其发送0信号(就像您对bash示例所做的一样)。 来自

  • 我试图通过PartitionKey和RowKey从Azure表存储中检索一个实体。当我的表中确实有一个实体带有这些键时,这种方法非常有效。 但是,当没有找到带有for键的实体时,我只是收到一个相当不清楚的错误,说“其中一个请求输入无效”…… 未处理的拒绝存储错误:其中一个请求输入无效。 有没有办法检查特定分区和行密钥是否存在实体?

  • 使用数据库时,您可以执行< code>snapshot.exists()来检查某些数据是否存在。根据文件,没有类似的储存方法。 https://firebase.google.com/docs/reference/js/firebase.storage.Reference 检查某个文件是否存在于Firebase存储中的正确方法是什么?