如何检查值是否成功插入?

时间:2013-10-15 07:33:04

标签: sql sql-server

我有一个程序,我在表格中插入值。

declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName,@lName)

编辑:

现在我想检查它是否成功插入设置@check = 0 else @check = 1

4 个答案:

答案 0 :(得分:35)

您可以在插入查询后立即使用@@ROWCOUNT服务器变量,以通过插入操作检查受影响的行数。

declare @fName varchar(50) = 'Abcd',
        @lName varchar(50) = 'Efgh'
INSERT INTO myTbl(fName,lName) values(@fName,@lName)

PRINT @@ROWCOUNT --> 0- means no rows affected/nothing inserted 
                 --> 1- means your row has been inserted successfully 

根据您的要求,您可以使用Case声明(根据评论):

--If you need @check as a bit type please change Int to bit
DECLARE @check Int = CASE WHEN @@ROWCOUNT = 0 THEN 1 ELSE 0 END

答案 1 :(得分:5)

您需要使用@@ROWCOUNT

它返回受最后一个语句影响的行数。如果行数超过20亿,请使用ROWCOUNT_BIG

  

@@ ROWCOUNT既是范围又是连接安全。

     

实际上,它只读取最后一个语句行数   联系和范围。

     

即使有触发器,在SQL Server中使用@@ ROWCOUNT也是安全的   在基表上。触发器不会扭曲您的结果;你会得到   你期待什么。即使设置了NOCOUNT,@@ ROWCOUNT也能正常工作。

所以你应该查询:

declare @fName varchar(50), @lName varchar(50), @check tinyint = 0
...
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
if  @@ROWCOUNT>0   
  set @check = 1

答案 2 :(得分:1)

在SQL-Sever中,您可以使用OUTPUT子句检查是否已成功插入值。 通过以下查询

 
declare @fName varchar(50),@lName varchar(50)

INSERT INTO myTbl(fName,lName) OUTPUT inserted.* values(@fName,@lName)  ;

 

如果插入了值,它将显示插入值的输出。您还可以将这些值存储到新表中。

答案 3 :(得分:0)

您可以在插入表格后使用@@ rowcount

DECLARE @check int

插入员工(姓名,电子邮件,电话,[地址]) VALUES('Test','test@mail.com','','')

如果(@@ ROWCOUNT> 0) SET @ check = 1

选择@check;