我有一个程序,我在表格中插入值。
declare @fName varchar(50),@lName varchar(50),@check tinyint
INSERT INTO myTbl(fName,lName) values(@fName,@lName)
编辑:
现在我想检查它是否成功插入设置@check = 0 else @check = 1
答案 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;