[英]How to tell if a record is already exists in the database before executing stored procedure?
我想創建一個存儲過程以將數據插入數據庫的表中,但是它應該是唯一的,因此我首先檢查輸入參數:
create procedure SP_Insert
@name varchar(50)
AS
if not exists (select Name from Employees where Name = @name)
begin
insert into Employess (Name)
values (@name)
end
我的問題是,在執行存儲過程后,如何在代碼中判斷傳遞的參數是否未被接受為唯一值?
在我的表單中,我有一個按鈕(插入)和一個文本框(名稱),當用戶單擊插入時,文本值將傳遞到存儲過程,並且我想彈出一個消息框,警告用戶重復輸入
使用@@ ROWCOUNT確定某行受到影響,並將該值作為參數返回。 查看此答案: 如何獲得受存儲過程影響的記錄數?
你可以這樣做:
insert into Employess (Name)
select @name
where not exists (select * from Employees where Name = @name)
select @@rowcount
現在, @@rowcount
(返回給調用方)是零還是一,這取決於是否有插入。
var recordsUpdated = command.ExecuteScalar();
實際上,您可以跳過select @@rowocount
而不顯式返回任何內容。
var recordsUpdated = command.ExecuteNonQuery();
返回受影響的記錄數。 我寧願更明確。 可能有人會改變程序,以便它執行其他更改@@rowcount
。 (為什么?但是他們可以。)而且他們可能不知道下游是否依賴於受影響的記錄數。 但是,如果是明確的,無論是選擇的值還是輸出參數,那么有人都可以說其他東西取決於該值。
create procedure SP_Insert
@name varchar(50), @result bit output
AS
if not exists (select Name from Employees where Name=@name)
begin
insert into Employess (Name) Values (@name)
set @result = 1
End
else set @result = 0
存儲過程可以返回一個值。 您可以將SP更改為以下形式:
create procedure SP_Insert
@name varchar(50)
AS
BEGIN
if not exists (select Name from Employees where Name=@name)
begin
insert into Employees (Name) Values (@name)
Return 0
end
else begin
Return 1
end
END
這是帶有更多詳細信息和示例的MSDN文章的鏈接: [https://msdn.microsoft.com/zh-cn/library/ms188655.aspx]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.