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

Geo*_*VIP 22 sql sql-server

我有一个程序,我将值插入到我的表中.

declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
Run Code Online (Sandbox Code Playgroud)

编辑:

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

Kaf*_*Kaf 37

您可以@@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 
Run Code Online (Sandbox Code Playgroud)

根据您的要求,您可以使用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
Run Code Online (Sandbox Code Playgroud)


gia*_*min 6

你需要使用@@ 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
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以@@rowcount在插入表后使用,如下所示:

DECLARE @check int

INSERT INTO Employees (Name,Email,Phone,[Address])
VALUES('Test','test@mail.com','','')

if(@@ROWCOUNT>0)
SET @check=1

SELECT @check;
Run Code Online (Sandbox Code Playgroud)