Stored procedures 我需要在程序中返回true或false

Stored procedures 我需要在程序中返回true或false,stored-procedures,boolean,return,Stored Procedures,Boolean,Return,我需要有关此存储函数的帮助: 该函数应返回布尔值 如果行存在,则给定两个参数,然后返回True或1(False或零) 函数必须接受2个参数 我需要返回true或false。TL;DR 我会使用一个函数(标量,或者可能是表值,但这需要更改为基于集合的方法) : 详细信息 SQL Server中没有布尔类型-最接近的是位(0/1)。存储过程只能返回一个INT,尽管(ab)以这种方式使用返回值是不寻常的,因为它旨在指示过程的成功或失败 CREATE PROCEDURE dbo.MyProc( @ke

我需要有关此存储函数的帮助:

  • 该函数应返回布尔值
  • 如果行存在,则给定两个参数,然后返回True或1(False或零)
  • 函数必须接受2个参数
  • 我需要返回true或false。

    TL;DR
    我会使用一个函数(标量,或者可能是表值,但这需要更改为基于集合的方法)

    :

    详细信息
    SQL Server中没有布尔类型-最接近的是位(0/1)。存储过程只能返回一个
    INT
    ,尽管(ab)以这种方式使用返回值是不寻常的,因为它旨在指示过程的成功或失败

    CREATE PROCEDURE dbo.MyProc( @key varchar(12), @subkey varchar(12)) AS
      RETURN (
        SELECT CASE
          WHEN exists
           (select * from contacts where [key]=@key and [subkey]=@subkey) 
            THEN 1 
            ELSE 0
          END);
    
    更常见的情况是,您将使用
    输出
    参数:

    CREATE PROCEDURE dbo.MyOutputParamProc( @key varchar(12), @subkey varchar(12), @result BIT OUTPUT) AS
      SET @result =
        CASE
          WHEN exists
           (select * from contacts where [key]=@key and [subkey]=@subkey) 
            THEN 1 
            ELSE 0
          END;
    GO
    
    或者,您可以
    选择一个结果,该结果将返回一行、一列

    CREATE PROCEDURE dbo.MyProc( @key varchar(12), @subkey varchar(12)) AS
      SELECT CASE 
          WHEN exists
           (select * from contacts where [key]=@key and [subkey]=@subkey) 
            THEN 'true' 
            ELSE 'false'
          END AS 'Result';
    
    也就是说,由于您不更改数据,因此在这种情况下,用户定义的函数可能比PROC更可取,例如:

    CREATE FUNCTION dbo.MyFunc(@key varchar(12), @subkey varchar(12))
    RETURNS BIT
    AS BEGIN
      RETURN (SELECT CASE 
          WHEN exists(select * from contacts where [key]=@key and subkey=@subkey) 
            THEN 1 
            ELSE 0
          END);
    END;
    
    这样称呼:

    SELECT dbo.MyFunc('key', 'subkey')
    

    最后一点——如果你需要同时检索几个键,如果性能很重要,那么你也可能需要考虑以一种基于集合的方式来接近这个问题,例如接受一个表值参数到你的PRO/FULL。

    它不起作用,给了我一个错误“1”附近的错误语法。抱歉-我有几个输入错误,特别是proc/func的命名错误,[key]是一个保留字。我们可以假设这是sql server吗?如果是,请添加
    sql server
    标记。
    SELECT dbo.MyFunc('key', 'subkey')