SqlServer实现类似Oracle的before触发器示例_MsSql

1. 插入数据前判断数据是否存在

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
alter TRIGGER CategoryExistTrigger
ON ProductCategory
instead of insert
AS 

declare @categoryName varchar(50);
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; 

-- Insert statements for trigger here
select @categoryName = CategoryName from inserted;
if exists(select * from ProductCategory where CategoryName =@categoryName)
begin
print 'Category exists..'
end;
else
begin
insert into ProductCategory select * from inserted;
end; 

END

2. 删除表中数据时需要先删除外键表的数据

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
alter TRIGGER DeleteOrderTrigger
ON OrderHeader
instead of delete
AS
declare @OrderId varchar(50);
BEGIN 

SET NOCOUNT ON;
select @OrderId = OrderId from deleted;
delete from OrderLine where OrderId = @OrderId; 

END
GO

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索oracle
before触发器
mssql 触发器、mssql 触发器 update、mssql 更新触发器、mssql 删除触发器、mssql 触发器实例,以便于您获取更多的相关知识。

时间: 2025-01-01 20:43:34

SqlServer实现类似Oracle的before触发器示例_MsSql的相关文章

SqlServer实现类似Oracle的before触发器示例

1. 插入数据前判断数据是否存在 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- =============================

sqlserver数据库移动数据库路径的脚本示例_MsSql

复制代码 代码如下: USE masterGO DECLARE    @DBName sysname,    @DestPath varchar(256)DECLARE @DB table(    name sysname,    physical_name sysname) BEGIN TRY SELECT    @DBName = 'TargetDatabaseName',   --input database name    @DestPath = 'D:\SqlData\'       

SQLSERVER 根据地图经纬度计算距离差示例_MsSql

SQL SERVER 根据地图经纬度计算距离的公式 复制代码 代码如下: go --创建经纬度距离计算函数 CREATEFUNCTION [dbo].[fnGetDistance] --LatBegin 开始经度 --LngBegin 开始维度 (@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNSFLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EAR

SQLServer用存储过程实现插入更新数据示例_MsSql

实现 1)有相同的数据,直接返回(返回值:0): 2)有主键相同,但是数据不同的数据,进行更新处理(返回值:2): 3)没有数据,进行插入数据处理(返回值:1). [创建存储过程] Create proc Insert_Update @Id varchar(20), @Name varchar(20), @Telephone varchar(20), @Address varchar(20), @Job varchar(20), @returnValue int output as declar

SQLServer EVENTDATA()函数来获取DDL 触发器信息_MsSql

复制代码 代码如下: -- Create a log table CREATE TABLE TriggerLog (LogInfo xml) -- Create a dummy table to delete later on CREATE TABLE TableToDelete (Id int PRIMARY KEY) -- 新建一个新表,作为删除实验表 INSERT INTO TableToDelete VALUES(1) GO -- 创建一个Drop Table 的 DDL CREATE

C#下SQLserver数据与Oracle数据对比新增

问题描述 C#下SQLserver数据与Oracle数据对比,如果Oracle中没有的则新增过去.具体怎么实现呢?用哪些控件和方法效率比较高呢? 解决方案 解决方案二:Oracle和SQLServer做差量同步,应该有这种软件能实现,实际使用中可能写程序同步比较靠谱1.在Oracle要同步的表创建触发器,把对表记录的操作(增.删.改)按主键记录到一张表里面2.筛选这张表的记录(比如一条主键是123的记录,对某一个字段做了三次修改,触发器在中间表产生三条记录,这里要筛选出最后一条记录,最后一条修改

代码-oracle数据库写触发器解决级联删除问题

问题描述 oracle数据库写触发器解决级联删除问题 请问写一个触发器,怎么在根据id删除商品时,用触发器删除这个商品对应的购物车表项,订单明细表,以及这个订单明细表对应的订单表,删除这个订单表时还要删除这个订单表中对应的其他明细表,谢谢了,最好能有点代码,求教各位了 解决方案 创建数据库时为了防止其他人不小心删除操作错误, 所有的外键都没有加级联删除.哪知,不知什么时候自己入了一批错误的数据进去,入库使用的是软件自动的,一下点错给自己带来无尽麻烦啊,删除就不好办了. 表间的关系比较复杂,数据量

oracle 触发器-求大神解答oracle数据库关于触发器集联删除的问题

问题描述 求大神解答oracle数据库关于触发器集联删除的问题 做期末项目,做到了触发器集联删除这块,我想删除course表(父表)里的数据,必须先删除teacou(子表)中的cid,cid与course里的id有外键关系.删除子表后我又不能找到父表里的id了,怎么办啊,请大神帮忙看看,谢谢啦! 解决方案 http://www.2cto.com/database/201212/178007.html

oracle 插删改 触发器 过程

问题描述 oracle 插删改 触发器 过程 5.建立触发器,当对考勤表Attend表进行相应插入.删除.修改时,对stud表的sum_evaluation 数值进行相应的数据更新. 6.建立过程,生成某班级某时段(起.止日期)的考勤汇总表class_attend中各字段值,并汇总相应班级,将考勤分值的汇总结果写入到class表中的sum_evaluation中. 如题.希望能给点提示或者提供写参考资料 解决方案 http://blog.csdn.net/indexman/article/det