【问题标题】:Stored procedure return as IF condition boolean expression存储过程返回为 IF 条件布尔表达式
【发布时间】: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,所以我猜一个函数会做。

谢谢

【问题讨论】:

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

标签: sql-server tsql


【解决方案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
    

    谢谢大家!

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多