存储过程返回为 IF 条件布尔表达式

Posted

技术标签:

【中文标题】存储过程返回为 IF 条件布尔表达式【英文标题】:Stored procedure return as IF condition boolean expression 【发布时间】:2017-07-10 14:40:08 【问题描述】:

在 IF 语句中使用存储过程(或函数)返回作为条件的最佳方法是什么?

可以让我做一些接近此的事情,声明了一个过程/函数“CheckCondition”,它使用 CAST 或作为输出返回真/假 1/0 值

IF CheckCondition 1, 'asfa' 
BEGIN
    //do something
ELSE
    //do something else
END

函数/过程不需要做 INSERT 或 UPDATE,只需要 SELECT,所以我猜一个函数会做。

谢谢

【问题讨论】:

有关如何为此使用存储过程,请参阅此答案:***.com/a/11965764/1220550。然而,用户定义的函数可能更直观:IF fn_CheckCondition(1, 'asfa') = 1 BEGIN ... 请注意,在 T-SQL 中,布尔变量不存在,因此您必须使用 BIT 或 INT。 @PeterB 函数声明中有什么特别之处吗?它如何返回值? return 1 可以吗? 我建议使用 BIT 数据类型并返回 0 或 1 ... 是的,请看这里:***.com/q/17028961/1220550 【参考方案1】:

带有输出参数的存储过程是一个解决方案;

create proc dbo.Condition

@Result bit output

as

set nocount on

set @Result=0 -- assumes false . . .

if 1=1 -- i.e. this is TRUE
    begin
        set @Result=1
    end
go
declare @Result bit

exec dbo.Condition
    @Result=@Result output

print @Result -- here's the result

上面的例子创建了一个proc,底部是如何执行它并得到结果

【讨论】:

【参考方案2】:

来自cmets,终于做到了,用函数而不是过程:

CREATE FUNCTION [dbo].[CheckCondition]
(
    @Parameter1 int = 0,
    @Parameter2 NVARCHAR(MAX) = 0,
)
RETURNS bit
AS
BEGIN   
    IF ( boolean expression with selects )          
        RETURN CAST(1 AS bit)
    ELSE
        RETURN CAST(0 AS bit)
    RETURN CAST(0 AS bit)
END

像这样使用它:

IF dbo.CheckCondition(@param1, 'sdasf') = 1
     //Do something
ELSE
     //Do something else

谢谢大家!

【讨论】:

以上是关于存储过程返回为 IF 条件布尔表达式的主要内容,如果未能解决你的问题,请参考以下文章

Sqlserver存储过程返回表,如何实现?

oracle 存储过程通过输入条件查询,返回多条记录和记录数。

Oracle:如何使用 if 条件在存储过程中调用存储过程

SQL Server 2008新特性——策略管理

[终章]进阶20-流程控制结构--if/case/while结构 - 三个while的存储过程案例(批量生成表单数据) - 随机长度的随机字符串的存储过程案例

MySQL数据库中的高级(进阶)正则和存储过程