【发布时间】:2021-06-18 11:37:18
【问题描述】:
我的存储过程以 [PhaseId] 作为参数,我需要根据作为参数传递的 PhaseId 从表中返回结果集。
如果表中没有符合该条件的数据,那么我想返回另一个 PhaseId 的结果集,我们称它为 DefaultPhaseId
DECLARE @DefaultPhaseId INT
SELECT @DefaultPhaseId = [PhaseId] FROM dbo.[Phase] WHERE [Description] = 'Unanimous'
SELECT * FROM [PhaseSelection] WHERE PhaseId = @PhaseId AND [IsActive] = 1
这里我需要检查上面的查询是否返回了任何记录,如果没有我需要执行下面的查询
SELECT * FROM [PhaseSelection] WHERE PhaseId = @DefaultPhaseId AND [IsActive] = 1
【问题讨论】:
-
CASE语句在这里对您没有帮助,T-SQL 不支持它们。但是,您可以使用IF语句并检查@@ROWCOUNT的值是否大于0。 -
尝试了 CASE 语句,但它不起作用,我觉得可能是我没有以正确的方式做它所以在这里发布...如果语句和 @@ROWCOUNT 我需要使用查询在 If 语句中?
-
PhaseId是表的主键(或唯一键)吗? -
“尝试过 CASE 语句,但不起作用” 不,它不会,因为我提到 T-SQL 不支持
Case语句,仅支持 @987654329 @ 表达式。不,@@ROWCOUNT返回上一条语句影响的行数。 -
是 [PhaseId] 是 [Phase] 表的 PK
标签: sql sql-server tsql case