當前位置:首頁 » 編程語言 » sql插入更新判斷
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql插入更新判斷

發布時間: 2023-08-28 02:04:12

sql在更新數據時,先判斷數據是否存在。存在就更新update,不存在就插入insert。

先判斷是否存在,存在就更新
IF EXISTS(SELECT 1 FROM sys_emp a,inserted b join hr_emp_title c on b.empid = c.empid)
BEGIN
update c
set c.title_code = b.title_code
from inserted b join hr_emp_title c on b.empid = c.empid
END
不存在就插入
ELSE
BEGIN
insert into hr_emp_title(empid,title_code) select empid ,title_code from inserted;
END

② SQL 插入判斷語句

--以產品表為例,有產品id為'新id',判斷是update還是insert
--思路1:執行update語句,如果受影響行數為0,就執行insert
update 產品表
set 產品id = '新id'
where 產品id = '新id'
if @@rowcount = 0
begin
insert into 產品表(產品id) values('新id')
end

--思路2:先執行select語句查是否有數據,有就update,沒有就insert
declare @row int
select @row = count(*) from 產品表 where 產品id = '新id'
if @row > 0
begin
update 產品表
set 產品id = '新id'
where 產品id = '新id'
end
else
begin
insert into 產品表(產品id) values('新id')
end

----
case 是一個函數,所以case只能使用在DML語句中,而不能用作執行update,insert等語句

③ SQL判斷並更新數據

UPDATEOrder_Main
SETPK=1
WHEREEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdAND(Pro='A'ORPro='D')
ANDNOTEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='F')
UPDATEOrder_Main
SETPK=2
WHEREEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='A')
ANDEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='D')

④ sql server 判斷記錄存在更新不存在插入

寫個存儲過程吧。或者建個主鍵吧,這樣插入就不會插入重復的數據了。

⑤ 在Sql Server觸發器中判斷操作是Insert還是Update還是Delete

DECLARE
@IsInsert
bit,
@IsUpdate
bit,
@IsDelete
bit
IF
EXISTS(SELECT
1
FROM
inserted)
AND
NOT
EXISTS(SELECT
1
FROM
deleted)
SET
@IsInsert
=
1
ELSE
SET
@IsInsert
=
0
IF
EXISTS(SELECT
1
FROM
inserted)
AND
EXISTS(SELECT
1
FROM
deleted)
SET
@IsUpdate
=
1
ELSE
SET
@IsUpdate
=
0
IF
NOT
EXISTS(SELECT
1
FROM
inserted)
AND
EXISTS(SELECT
1
FROM
deleted)
SET
@IsDelete
=
1
ELSE
SET
@IsDelete
=
0
create
trigger
Update_Del
on
Table
for
update,delete
as
if
not
exists(select
1
from
inserted)
begin
/*inserted表無記錄,是刪除*/
end
else
begin
/*是更新*/
end
go
關鍵在於Inserted表
觸發器語句中使用了兩種特殊的表:deleted
表和
inserted
表。
Deleted
表用於存儲
DELETE

UPDATE
語句所影響的行的復本。在執行
DELETE

UPDATE
語句時,行從觸發器表中刪除,並傳輸到
deleted
表中。Deleted
表和觸發器表通常沒有相同的行。
Inserted
表用於存儲
INSERT

UPDATE
語句所影響的行的副本。在一個插入或更新事務處理中,新建行被同時添加到
inserted
表和觸發器表中。Inserted
表中的行是觸發器表中新行的副本。
1.插入操作(Insert)
Inserted表有數據,Deleted表無數據
2.刪除操作(Delete)
Inserted表無數據,Deleted表有數據
3.更新操作(Update)
Inserted表有數據(新數據),Deleted表有數據(舊數據)