从 SQL 服务器中的存储过程将 if 语句和 return 值用于 c#

Use if statement and return value to c# from a stored procedure in SQL Server

我只想检查我的数据库中给定的 table 中是否存在名称,但我从存储过程中获取多个 returns 导致异常。

这是我在 SQL 服务器中使用的存储过程:

CREATE OR ALTER PROCEDURE ContactExists 
    @Name varchar(50)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result bit = 0
    DECLARE @name varchar(50) = '';

    SET @name = (SELECT Name FROM Table)

    IF (@name = @Name)
    BEGIN
        SET @result = 1
        RETURN @result
    END

    RETURN @result
END
GO

这是我在 C# 中使用的方法:

SPstr = "dbo.ContactExists";

SqlCommand cmd = new SqlCommand(SPstr, connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Name", Name);

var returnValue = cmd.Parameters.Add("@result", SqlDbType.Int);
returnValue.Direction = ParameterDirection.ReturnValue;

cmd.ExecuteNonQuery();

return (int)returnValue.Value;

I am getting multiple returns from the stored procedure causing an exception.

我怀疑你的意思是你得到这个:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

由此产生:

set @name = (SELECT Name from Table)

if Table 有多于一行。确保子查询 (SELECT Name from Table) returns 最多一行(在 pk 上使用 WHERE,使用 MAX 等。)

不要将存储过程中的 return 值用于 return 数据。这是一种表示过程成功或失败的古老且几乎已过时的方式。所以要么使用一个输出参数:

CREATE OR ALTER PROCEDURE ContactExists 
    @Name varchar(50), @result bit output
AS
BEGIN
    SET NOCOUNT ON;

    set @result = 0;
    
    if exists (SELECT * FROM SomeTable where name = @Name)
    begin
      set @result = 1;
    end


END

或结果集

CREATE OR ALTER PROCEDURE ContactExists 
    @Name varchar(50)
AS
BEGIN
    SET NOCOUNT ON;

    declare @result bit = 0;
    
    if exists (SELECT * FROM SomeTable where name = @Name)
    begin
      set @result = 1;
    end

    select @result result;
END