我有一个将值插入表的过程。
declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
编辑:
现在我想检查它是否插入成功 set @check = 0 else @check = 1
我有一个将值插入表的过程。
declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
编辑:
现在我想检查它是否插入成功 set @check = 0 else @check = 1
您可以@@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
您需要使用@@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
您可以@@rowcount
在插入表之后使用,如下所示:
DECLARE @check int
INSERT INTO Employees (Name,Email,Phone,[Address])
VALUES('Test','test@mail.com','','')
if(@@ROWCOUNT>0)
SET @check=1
SELECT @check;
在 SQL-Sever 中,您可以使用 OUTPUT 子句检查值是否成功插入。通过以下查询
declare @fName varchar(50),@lName varchar(50)
INSERT INTO myTbl(fName,lName) OUTPUT inserted.* values(@fName,@lName) ;
如果插入了值,它将显示插入值的输出。您还可以将这些值存储到新表中。