从 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
我只想检查我的数据库中给定的 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