C# 在执行存储过程之前,如何判断数据库中是否已经存在记录?
我想创建一个存储过程,将数据插入数据库中的表中,但它应该是唯一的,因此我首先检查传入参数:C# 在执行存储过程之前,如何判断数据库中是否已经存在记录?,c#,sql-server,stored-procedures,C#,Sql Server,Stored Procedures,我想创建一个存储过程,将数据插入数据库中的表中,但它应该是唯一的,因此我首先检查传入参数: 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 我的问题是
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
我的问题是,在执行存储过程后,如何在代码中判断传递的参数是否未被接受为唯一值
在我的表单中,我有一个按钮(Insert)和一个文本框(name),当用户单击“插入”时,文本值将传递给存储过程,我想弹出一个消息框,警告用户有重复的条目使用@@ROWCOUNT确定某一行受到影响,并将该值作为参数返回。查看此答案:使用@@ROWCOUNT确定某行受影响,并将该值作为参数返回。请参阅此答案:存储过程可以返回值。 您可以将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文章的链接,其中包含更多详细信息和示例:
存储过程可以返回值。 您可以将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文章的链接,其中包含更多详细信息和示例:
您可以执行以下操作:
insert into Employess (Name)
select @name
where not exists (select * from Employees where Name = @name)
select @@rowcount
现在,@@rowcount
(返回给调用者)是零还是一取决于是否有插入
var recordsUpdated = command.ExecuteScalar();
实际上,您可以跳过select@@rowcount
而不显式返回任何内容
var recordsUpdated = command.ExecuteNonQuery();
返回受影响记录的数量。我宁愿说得更清楚些。有人可能会回来更改该过程,以便它执行其他更改@@rowcount
。(为什么?但他们可以)而且他们可能不知道下游的某些东西取决于受影响的记录计数。但如果它是显式的,无论是选定的值还是输出参数,那么有人可以判断出其他东西取决于该值。您可以这样做:
insert into Employess (Name)
select @name
where not exists (select * from Employees where Name = @name)
select @@rowcount
现在,@@rowcount
(返回给调用者)是零还是一取决于是否有插入
var recordsUpdated = command.ExecuteScalar();
实际上,您可以跳过select@@rowcount
而不显式返回任何内容
var recordsUpdated = command.ExecuteNonQuery();
返回受影响记录的数量。我宁愿说得更清楚些。有人可能会回来更改该过程,以便它执行其他更改
@@rowcount
。(为什么?但他们可以)而且他们可能不知道下游的某些东西取决于受影响的记录计数。但是如果它是显式的,无论是选定的值还是输出参数,那么有人可以判断出其他东西取决于该值。这里的最佳方法。这里的最佳方法。那么,如果有20个人的名字是Mohamed
,听起来你需要有一个不同的列呢要检查记录是否存在,还需要对SQL
进行一些基本阅读,这将帮助您更好地解决问题。这就是我在编写上述示例时想到的,我的真实表格是Countries表格。然后,您应该根据实际表格显示代码/示例。。来吧,你也应该避免使用sp_uu前缀,或者干脆干脆跳过前缀。那么,如果你有20个人的名字是Mohamed
,听起来你需要有一个不同的列来检查记录是否存在,也可以对SQL
做一些基本的阅读,这将帮助你更好地解决你的问题。这就是我在写上述示例时想到的,我的实际表格是Countries表格。那么您应该根据实际表格显示代码/示例。。来吧,你也应该避免使用sp_uu前缀,或者干脆干脆跳过前缀。这行不通。return语句返回一个整数,用于指示执行状态。如果要获取返回的值,应使用输出参数。是的,存储过程可以返回值,但只能返回INT
值,不能返回字符串@我认为这个答案是正确的。请参阅“请删除否决票”。@Diego最初返回的是字符串文字。我仍然会对此投反对票,因为它使用return语句将数据传回。返回的数据应使用输出参数。甚至在现在链接到答案的文章中也指出了这一点。但既然它至少能满足要求,我想我不会投反对票。@Diego我猜你投了这张票以“抵消”反对票。这不是应该的工作方式。如果这是使用输出参数,在我看来,这是值得投票的。这是行不通的。return语句返回一个整数,用于指示执行状态。如果要获取返回的值,应使用输出参数。是的,存储过程可以返回值,但只能返回INT
值,不能返回字符串@我认为这个答案是正确的。请参阅“请删除否决票”。@Diego最初返回的是字符串文字。我仍然会对此投反对票,因为它使用return语句将数据传回。返回的数据应使用输出参数。甚至在现在链接到答案的文章中也指出了这一点。但既然它至少能满足要求,我想我不会投反对票。@Diego我猜你投了这张票以“抵消”反对票。这不是应该的工作方式。如果这是使用输出参数,在我看来是值得投票的。