使用Sql Server。编写存储过程。这是我想要实现的伪代码:
IF EXISTS ( SELECT field1
FROM t1
WHERE field1 = ... AND field2 = ...)
BEGIN
SELECT field1
FROM t1
WHERE field1 = ... AND field2 = ...
END
更好的方法吗?任何帮助表示赞赏。
chirayu已
更新:问题是同一个查询执行了两次。我不能只运行一次查询并返回null(如果结果为null我想返回一个替代结果)。
答案 0 :(得分:3)
您可以在运行一次查询后检查@@ ROWCOUNT以确定是否返回值:
答案 1 :(得分:2)
如果选择不产生任何结果,则不会返回任何结果。我没有看到任何理由在这里使用条件,除非我遗漏了某些东西......
答案 2 :(得分:2)
有时会返回结果的存储过程,而有时它不会是任何API使用的噩梦。客户端API具有不同的入口点,具体取决于您是返回结果集(SqlCommand.ExecuteReader
)还是不返回结果集(SqlCommand.ExecuteNonQuery
)。应用程序不可能提前知道使用哪个API 建模工具使用SET FMTONLY
选项分析返回结果集的元数据,当返回的结果集随机开始改变形状时,建模工具非常混淆。换句话说,你走错了路,停下来转身。
只需运行查询,没有符合条件的行,它只会返回一个空结果集。这正是每个客户端API和建模工具对您的过程所期望的。
答案 3 :(得分:2)
我在使用CTE和表变量之前已经这样做了,它需要更多行代码,但查询只写一次,因此你的逻辑存在于一个地方。
DECLARE @Results TABLE (Result INT);
WITH ResultsCTE AS
(
--Your query goes here
SELECT 1 as Result
WHERE 1 = 1
)
INSERT INTO @Results
SELECT Result
FROM ResultsCTE
IF (SELECT COUNT(*) FROM @Results) > 0
BEGIN
SELECT * FROM @Results
END
ELSE BEGIN
SELECT 'Do Something Else or Do Nothing!'
END