我要做的就是檢查資料庫中給定表中是否存在名稱,但我從存盤程序中獲得多個回傳,導致例外。
這是我在 SQL Server 中使用的存盤程序:
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;
uj5u.com熱心網友回復:
我從導致例外的存盤程序中獲得多個回傳。
我懷疑你的意思是你得到這個:
子查詢回傳超過 1 個值。當子查詢跟隨 =、!=、<、<=、>、>= 或子查詢用作運算式時,這是不允許的。
這將由此產生:
set @name = (SELECT Name from Table)
如果Table有不止一排。確保子查詢 ( SELECT Name from Table) 最多回傳一行(在 pk 上使用 WHERE,使用 MAX 等。)
uj5u.com熱心網友回復:
不要使用存盤程序的回傳值來回傳資料。這是一種古老且幾乎過時的方式來表示 proc 的成功或失敗。所以要么使用輸出引數:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466149.html
上一篇:獲取整個組沒有值的行
