关于SQL server触发器编程问题

本人目前处于实习生,公司给了我一个项目,项目进度快接近完成了,无奈遇到了个大问题,真的不知道该怎么解决,公司又没人带,我上司也只是懂一点点,但不是专家,他是学VS编程的,看看有没有SQL 大神或专家帮我分析和解决下这问题,可能想了解的更详细可以加我QQ:584958184.

现在公司有台机器,机器的状态有0,1,2,3,机器开启运行状态的时候是0,其他的 1、2和3对应的是其他状态,机器一开启就会自动有数据生成,生成的数据信息如(图1),

图1

down机的时候,(也就是从0变为非0的时候,也就是0到1,或0到2,或者0到3这样的状态)table2会有数据记录产生,产生的数据记录其实就是错误代码。而每一次table1发生down机状态记录的时候,都会有个故障时间数据产生(即table1的非0数据记录的itime字段),故障了那么table2肯定会插入错误代码,但在这一个故障时间段直到下次机器变为0状态恢复运行时,错误代码有很多,例如下图是其中一个table1的down机过程:

图2

下图就是table2造成此次down机的所有错误代码

图3

由此可见,此次down机状态的时间是13点58分35秒,并且在13点59分22秒机器恢复运行(table2里runtime字段时间其实就是机器下次恢复运行变为0的时间),这2秒的时间里造成此次down机的错误代码有许多条,并且有些错误代码都在一个时间点上13点58分36秒,但有些不是,

现在我上司想要实现的效果就是,table1的每一次down机状态,我只要table2相对应此次down机状态的最先报错第一条代码,其他错误代码其他时间都不要,只要一条,并把此条错误代码数据记录的location字段和pointer字段还有itime值插入到table4中,效果如下图(图中效果的数据记录是手动插入):

图4

3个回答

BEGIN
         CREATE TEMPORARY TABLE IF NOT EXISTS t4(
                    flag VARCHAR(1),
            licensetype VARCHAR(2),
            carno VARCHAR(16),
            carno_original  VARCHAR(16),
            pointcodeEnt VARCHAR(12),
            pointcodeExt VARCHAR(12),
            pointnameEnt  VARCHAR(100),
            pointnameExt  VARCHAR(100),
            devicecode VARCHAR(18),
            devicecodeExt VARCHAR(18),
            cpicEnterPath  VARCHAR(200),
            cpicExitPath   VARCHAR(200),
            carcolor VARCHAR(4),
                plate_position VARCHAR(45),
            collectiondate1 DATETIME,
            collectiondate2 DATETIME
        );

                SET @flag:= '1';
        INSERT INTO t4 SELECT
                            @flag:= '2' AS flag,
                @licensetype:=IFNULL(t2.licensetype,t3.licensetype) AS licensetype,
                @carno:= IFNULL(t2.carno,t3.carno) AS carno,
                @carno_original:= IFNULL(t2.carno_original,t3.carno_original) AS carno_original,
                @pointcodeEnt:=IFNULL(t2.pointcode,'') AS pointcodeEnt,
                @pointcodeExt:=IFNULL(t3.pointcode,'') AS pointcodeExt,
                @pointnameEnt:=IFNULL(t2.pointname,'') AS pointnameEnt,
                @pointnameExt:=IFNULL(t3.pointname,'') AS pointnameExt,
                @devicecode:=IFNULL(t2.devicecode,'') AS devicecode,
                @devicecodeExt:=IFNULL(t3.devicecode,'') AS devicecodeExt,
                @cpicEnterPath:=t2.cpic1path AS cpicEnterPath,
                @cpicExitPath:=t3.cpic1path AS cpicExitPath,
                @carcolor:=IFNULL(t2.carcolor,t3.carcolor) AS carcolor,
                @plate_position:=IFNULL(t2.plate_position,t3.plate_position) AS plate_position,
                @collectiondate1:=IFNULL(t2.collectiondate,NULL) AS collectiondate1,   -- 入口采集时间
                @collectiondate2:=IFNULL(t3.collectiondate,NOW()) AS collectiondate2
            FROM  park_detect_info t2
                INNER JOIN park_detect_info t3 ON NEW.exit_nid = t3.nid
            WHERE  t2.nid = NEW.enter_nid;

                IF @flag = '1' THEN
            INSERT INTO t4 SELECT
                    @flag:= '2' AS falg,
                    @licensetype:= t2.licensetype AS licensetype,
                    @carno:= t2.carno AS carno,
                    @carno_original:= t2.carno_original AS carno_original,
                    @pointcodeEnt:= '' AS pointcodeEnt,
                    @pointcodeExt:= IFNULL(t2.pointcode,'') AS pointcodeExt,
                    @pointnameEnt:= '' AS pointnameEnt,
                    @pointnameExt:= IFNULL(t2.pointname,'') AS pointnameExt,
                    @devicecode:= '' AS devicecode,
                    @devicecodeExt:= IFNULL(t2.devicecode,'') AS devicecodeExt,
                    @cpicEnterPath:= '' AS cpicEnterPath,
                    @cpicExitPath:= t2.cpic1path AS cpicExitPath,
                    @carcolor:= t2.carcolor AS carcolor,
                    @plate_position:=t2.plate_position AS plate_position,
                    @collectiondate1:= NULL AS collectiondate1,   -- 入口采集时间
                    @collectiondate2:= t2.collectiondate AS collectiondate2
                FROM  park_detect_info t2  WHERE  t2.nid = NEW.exit_nid;         -- 如果出口存在,则用出口的
                END IF;  

                        IF @flag = '1' THEN
            INSERT INTO t4 SELECT
                    @flag:= '2' AS falg,
                    @licensetype:=t2.licensetype AS licensetype,
                    @carno:= t2.carno AS carno,
                    @carno_original:= t2.carno_original AS carno_original,
                    @pointcodeExt:='' AS pointcodeExt,
                    @pointcodeEnt:=IFNULL(t2.pointcode,'') AS pointcodeEnt,
                    @pointnameEnt:=IFNULL(t2.pointname,'') AS pointnameEnt,
                    @pointnameExt:='' AS pointnameExt,
                    @devicecode:=IFNULL(t2.devicecode,'') AS devicecode,
                    @devicecodeExt:='' AS devicecodeExt,
                    @cpicEnterPath:=t2.cpic1path AS cpicEnterPath,
                    @cpicExitPath:='' AS cpicExitPath,
                    @carcolor:=t2.carcolor AS carcolor,
                    @plate_position:=t2.plate_position AS plate_position,
                    @collectiondate1:=t2.collectiondate AS collectiondate1,   
                    @collectiondate2:=NULL AS collectiondate2
                FROM  park_detect_info t2  WHERE t2.nid = NEW.enter_nid;          -- 如果出口不存在,则用入口的
        END IF;         

        IF @flag = '2' THEN 
            SET NEW.`licensetype` = @licensetype; SET @licensetype:= NULL;
            SET NEW.carno = @carno; SET @carno:= NULL;
            SET NEW.carno_original = @carno_original;SET @carno_original:= NULL;
            SET NEW.pointcodeEnt = @pointcodeEnt; SET @pointcodeEnt:= NULL;  SET NEW.pointcodeExt = @pointcodeExt;SET @pointcodeExt:= NULL;
            SET NEW.pointnameEnt = @pointnameEnt; SET @pointnameEnt:= NULL;  SET NEW.pointnameExt = @pointnameExt;SET @pointnameExt:= NULL;
            SET NEW.devicecode = @devicecode;SET @devicecode:= NULL;
            SET NEW.devicecodeExt = @devicecodeExt;SET @devicecodeExt:= NULL;
            SET NEW.cpicEnterPath = @cpicEnterPath; SET @cpicEnterPath:= NULL;
            SET NEW.cpicExitPath = @cpicExitPath;SET @cpicExitPath:= NULL;
            SET NEW.carcolor = @carcolor;SET @carcolor:= NULL;
            SET NEW.plate_position = @plate_position;SET @plate_position:= NULL;
            SET NEW.collectiondate1 = @collectiondate1;SET @collectiondate1:= NULL;
            SET NEW.collectiondate2 = @collectiondate2;SET @collectiondate2:= NULL;
          SET @flag:= '1';
      END IF; 

        DELETE FROM t4 WHERE 1=1;

END

以前写过的一个坑爹的mysql 触发器,看看是否有参考价值。

在table2 上添加触发器,每次插入触发,

查一下 table1 最近一次宕机的时间 和 table2 最后一行错误代码的时间 对比,若小于宕机时间就不采集

具体触发器语法你得学习一下,打开 数据库的 error.log 看看触发器错误。

我没用过sqk server,是以Mysql 角度来答复这个问题的。

wodeqq584958184
wodeqq584958184 还有我发现了一个问题,可能需要加Q详谈
一年多之前 回复

IF EXISTS(SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[tr_WorkOrderInfo_i]') AND OBJECTPROPERTY(id,N'IsTrigger') = 1)
DROP TRIGGER [tr_WorkOrderInfo_i]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER dbo.tr_WorkOrderInfo_i ON dbo.WorkOrderInfo
FOR INSERT AS
BEGIN
-- 判断有没有数据
IF EXISTS (SELECT 0 FROM Inserted)
BEGIN
DECLARE @partnerAbbr NVARCHAR(40)
,@partnerCode NVARCHAR(40)
,@flag1 INT

           ,@count       INT
           ,@i           INT = 1
           ,@contactId   INT

    SELECT @count = COUNT(*) FROM Inserted

    -- 循环新增到 dbo.Contact 中
    WHILE @i <= @count
    BEGIN

        SELECT 
               @partnerCode = T2.PartnerCode
              ,@partnerAbbr = T2.PartnerAbbr
              ,@flag1       = T2.Flag1
          FROM 
              (SELECT 
                      RowNumber = ROW_NUMBER() OVER(ORDER BY T1.PartnerCode)
                     ,* 
                 FROM 
                      (SELECT 
                              Inserted.PartnerCode
                             ,Inserted.PartnerAbbr
                             ,Inserted.Flag1 
                         FROM 
                              Inserted
                      GROUP BY
                              Inserted.PartnerCode,Inserted.PartnerAbbr,Inserted.Flag1) T1
               ) T2               
         WHERE 
               T2.RowNumber = @i

        -- 判断该厂商是否存在
        IF NOT EXISTS (SELECT 0 FROM dbo.Contact WHERE Code = @partnerCode AND Name = @partnerAbbr AND Flag1 = @flag1)
        BEGIN

        -- 获取厂商的Id
        SELECT @contactId = ISNULL((MAX(Id) + 1),200000) FROM dbo.Contact WHERE Flag1 != 0

        SET IDENTITY_INSERT dbo.Contact ON

           INSERT INTO dbo.Contact
                     ( Id ,
                       Code ,
                       Name ,
                       Nick ,
                       EnglishName ,
                       Title ,
                       Department ,
                       Role ,
                       Remark ,
                       Tel1 ,
                       Tel2 ,
                       Tel3 ,
                       Tel4 ,
                       Tel5 ,
                       TelMap ,
                       Email1 ,
                       Email2 ,
                       Email3 ,
                       Email4 ,
                       Email5 ,
                       EmailMap ,
                       Address1Id ,
                       Address2Id ,
                       Address3Id ,
                       AddressMap ,
                       StrExt1 ,
                       StrExt2 ,
                       NumExt1 ,
                       NumExt2 ,
                       Flag1 ,
                       Flag2 ,
                       IsActive ,
                       CreatedDate ,
                       CreatedBy ,
                       ModifiedDate ,
                       ModifiedBy ,
                       State
                     )
             VALUES  ( @contactId ,
                       @partnerCode , -- Code - nvarchar(40)
                       @partnerAbbr , -- Name - nvarchar(40)
                       N'' , -- Nick - nvarchar(40)
                       N'' , -- EnglishName - nvarchar(40)
                       0 , -- Title - int
                       0 , -- Department - int
                       0 , -- Role - int
                       N'' , -- Remark - nvarchar(1024)
                       N'' , -- Tel1 - nvarchar(20)
                       N'' , -- Tel2 - nvarchar(20)
                       N'' , -- Tel3 - nvarchar(20)
                       N'' , -- Tel4 - nvarchar(20)
                       N'' , -- Tel5 - nvarchar(20)
                       N'' , -- TelMap - nvarchar(80)
                       N'' , -- Email1 - nvarchar(40)
                       N'' , -- Email2 - nvarchar(40)
                       N'' , -- Email3 - nvarchar(40)
                       N'' , -- Email4 - nvarchar(40)
                       N'' , -- Email5 - nvarchar(40)
                       N'' , -- EmailMap - nvarchar(80)
                       0 , -- Address1Id - int
                       0 , -- Address2Id - int
                       0 , -- Address3Id - int
                       N'' , -- AddressMap - nvarchar(80)
                       N'' , -- StrExt1 - nvarchar(40)
                       N'' , -- StrExt2 - nvarchar(80)
                       0.00000 , -- NumExt1 - decimal
                       0.00000 , -- NumExt2 - decimal
                       @flag1 , -- Flag1 - int
                       0 , -- Flag2 - int
                       1 , -- IsActive - int
                       GETDATE() , -- CreatedDate - smalldatetime
                       1 , -- CreatedBy - int
                       GETDATE() , -- ModifiedDate - smalldatetime
                       1 , -- ModifiedBy - int
                       1  -- State - int
                     )

        SET IDENTITY_INSERT dbo.Contact OFF

        END

        SET @i = @i + 1

     END
END

END

wodeqq584958184
wodeqq584958184 好的 我参考下
一年多之前 回复
Jason_Brown
JellyMonster 这是我写过的一个sqlserver的触发器,听你描述 感觉只需要在 Inserted表里 根据时间排序获取第一条记录,再插到表中
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
SQL 触发器编程问题
SQL 触发器编程rnrn对如下表:rnTable1:cbjbxxrn字段1:zwcm varchar(20) PKrn字段2:cjgdm varchar(4) FKrnrnTable2:cjgdmbrn字段1:cjgdm varchar(4) PKrn字段2:cjgmc varchar(12)rnrnTable3:cbxxrn字段1:zwcm varchar(20) PKrn字段2:cjgmc varchar(12)rnrn对Table1编写触发器,要使Table1中的字段cjgdm连接Table2的cjgmc后,放到Table3中。该怎么编写触发器呢?rnrn望高手指点!rnrnrn
关于SQL Server触发器
关于SQL Server触发器rn:我想用触发器做一个转换SQL语句,并且将SQL语句写入文件中rn例如我在Table1中直接增加一条记录rn序号 姓名 性别 分数1 分数2 总分rn1 zyp man 20 30 50 rn转换成rn"INSERT Table1 VALUE(1,"ZYP","MAN",20,30,50)"
关于SQL Server的触发器创建
我现在有两张表,一张是分类表,字段有CategoryID,CategoryName,ArticleCount(最后一个字段是用来统计在该分类下日志的数量);日志表,字段有ArticleID,ArticleTitle,ArticleContent,CategoryID。rn现在我想在分类表中能自动统计某个分类下日志的数量,比如我添加了一篇日志,所属分类是A,我希望分类表中A分类的的ArticleCount能自动更新(就是加1或者重新统计数量然后更新ArticleCount的值)。rn我想这个应该是用触发器来做的,但是我不清楚这个触发器是该写在分类表下还是日志表下,然后具体的触发器该怎么写?rn由于时间有些紧,我不太可能去查阅太多资料。希望懂的怎么做的朋友能指点一下
关于SQL Server触发器的问题
我希望在插入新的数据或者修改的时候,有个计划号,这个不能冲突。rn我用了自增字段做主键,我用触发器来控制,触发器很简单代码如下rnCREATE trigger trg_CheckRepeatNornon t_Planrnfor insert,updaternasrn declare @NewNo varchar(50)rn select @NewNo = PlanNo from insertedrn if exists(select * from t_Plan where PlanNo = @NewNo)rn beginrn raiserror('存在重复的投料单号',16,1)rn endrn但是发生问题的是,我无论修改什么值,都会提示已经存在重复的投料单号rnfor语句不是应该在sql语句执行前触发的吗?rn例如我随意修改一个计划单号,他都会提示,我新增,也会出现这个提示。哪怕号码不重复。rn以前不会这样的啊,是不是哪里设置问题啊?rn谢了
关于SQL Server中触发器
这是我写的一个创建触发器的代码(如下),要实现Stuff表中Position字段改变则Salary字段也跟着改变的功能rncreate trigger tri_test on Stuffrnafter update rnreferencing NEW AS table_after_updatern OLD AS table_before_updaternfor each statementrnbeginrnIF table_after_update.Position = 'Manager'rn update Stuff set Salary = 5000rnwhere StuffNum = table_after_update.stuffNumrnelse IF table_after_update.Position = 'Assistant'rn update Stuff set Salary = 3000rnwhere StuffNum = table_after_update.stuffNumrnelse IF table_after_update.Position = 'Supervisor'rn update Stuff set Salary = 4000rnwhere StuffNum = table_after_update.stuffNumrnendrnrn运行时提示出错rnrn服务器: 消息 170,级别 15,状态 1,过程 tri_test,行 3rn第 3 行: 'referencing' 附近有语法错误。rnrn我不知道问题出在哪里?请教各位,顺便问一下正确的应该怎么写?rn
关于sql server触发器问题
我想把表的insert,update,delete 触发事件写在一个触发器里。rn在触发器里应该怎么判断触发事件?rn描述:rnCREATE TRIGGER [TRIGGER_NAME] ON [dbo].[Table_name] rnFOR INSERT, UPDATE, DELETE rnASrn if insert事件rn beginrn 语句rn end rn if UPDATE事件rn beginrn 语句rn endrn if DELETE事件rn beginrn 语句rn endrn请问在实际中,应该如何判断?
关于sql server 触发器的问题
rnALTER trigger [dbo].[Jk_InfoDeleteTable]rnon [dbo].[信息删除表]rnAFTER deleternasrninsert into backinfo(表名,主键字段,辅助字段,时间)rnselect 表名, 主键字段,辅助字段,getdate()rnfrom deletedrnrn这是我的触发器 ,怎么获得是哪个用户删除这个表 rn我现在需要在我的backInfo 加一个数据库操作用户operatorrnrndeleted可以获得这个用户吗?
关于SQL Server 触发器问题
SQLServer2005 两个表分别为A,B;其中A表包含a1,a2两列,B表包含b1,b2,b3,b4;rn现在我想建一个触发器,A表新增一行后,B表也新增一行。rnb1=a1,b2=a2,b3为随机数,b4为系统当前时间,请问这个触发器怎么写??rn请知道的朋友赐教。呵呵!!!
【SQL server触发器】触发器基础知识
前言: 触发器与存储过程有一点点差别的,那么我们什么时候要用触发器,接下来将给大家揭晓! 1、什么是触发器 触发器是一个在修改指定表中的数据执行的存储过程。通常通过创建触发器来强制实现 不同表 中的逻辑相关数据的引用完整性或一致性。由于用户不能绕过触发器,所以用来 强制实施复杂的业务规则!以此确保数据的 完整性 ! 一开始以为触发器没什么总结的,但是通过系统的学习,发现还是有必...
关于一个SQL server项目编程问题
问题或许很很难很复杂,但是我还是希望有人能帮我解决下,本人是刚刚出来学校的实习生,现在实习的公司,我上司安排了个项目给我,但是没有人带,我上司也只是懂接触过一点点SQL server,但并不是专家,现在项目凭着我自己翻寻各种百度和CSDN,完成了一半进度,但是现在真的遇到难题了,不知道怎么往下编写程序了,希望求各路SQL server大神、高手、专家帮我解决这个问题,如果可能我觉得下面的思路还是不清晰,可以加我QQ:584958184nn![图1](https://img-ask.csdn.net/upload/201804/22/1524409571_457445.jpg)n![图2](https://img-ask.csdn.net/upload/201804/22/1524409608_557676.jpg)n来讲下问题吧,就是计算时间差和传递的问题,目前表里的数据是我手动输入的,但实际上是机器开启后(机器状态为0的时候就是恢复运行状态),数据自动往table4插入的,由于后期数据量很大,有个百度吧友建议我用游标来做,可是我不会用游标......nn我来说下效果的思路:n当table4中每次出现的一条错误代码记录时(当location、pointer和ng-itime字段下有数据时,就是一条错误代码),用它们下一条状态记录machine-itime的时间(状态记录的时间也就是machine-status字段为0值的machine-itime字段)减去它自己的ng-itime时间,得出来的时间差值就是这条错误代码的持续时间。并且把这个值传递去table5去,但这个传递有条件,就是以错误类型为条件(table4中的location+pointer字段就是一个类型),例如table4中(图1),出现了3条错误代码,类型分别为sta080 63、zone6 49和System 481,每条错误代码的的下一条状态记录的时间(machine_itime)减去它们各ng_itime,得出来的时间差值要传递到table5对应类型的错误代码中,并把此值插入到time字段中(table5表图是图2)。nn还要注意的是,table4的每一条错误代码记录,肯定会有重复出现的,重复出现的错误代码,经过计算出来的时间差值,然后选择table5相对应的错误代码类型,要与旧记录的时间差值进行叠加!!!并不是替换,而是旧记录与新纪录进行相加~!!
关于SQL SERVER 发布与订阅的VC编程问题
实现4台服务器(均使用SQLSERVER,A\B\C\D)某几个表的同步,打算用ADO方式写一个VC程序通过发布和订阅来达到目的,假设A为发布服务器,B、C、D为订阅服务器。rn想问一下各位有否接触过SQLSERVER的发布与订阅编程(不是企业管理器的)?rn或者有没更好的替代方法实现这些表的数据同步?rn在此先谢过各位了~~~rn
Sql server,DB-Library编程问题?(急)
请教各位大侠,DB-Library中事务怎么用?找了很久,好像没有看到对事务的提交或回滚的涵数。
SQL Server创建触发器
本文主要是介绍创建触发器的必要性,然后介绍触发器的应用场合,以及创建触发器能给我呢带来的好处,最后以实际的代码来阐述创建触发器的具体过程及步骤。
SQL SERVER 触发器的编写
触发器刚开始接触时感觉还很困难,但是凡事只要静下心看还是很简单。 这是一个sql server修改操作的触发器,希望可以给刚接触触发器的朋友一些启示。...
SQL Server触发器的安全性
【赛迪网讯】使用SQL Server开发的朋友应该都很注意SQL Server的安全性,本文主要给大家介绍SQL Server触发器的安全隐患,特分享给大家,希望能给大家带来帮助。 触发器权限和所有权 CREATE TRIGGER 权限默认授予定义触发器的表所有者、sysadmin 固定服务器角色成员以及 db_owner 和 db_ddladmin 固定数据库角色成员,并且不可转让。 需...
sql server触发器工作原理
sql server触发器工作原理 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软 主要包括C# ASP.NET SQLDBA 源码 毕业设计 开题报告 答辩PPT等等好多知识
SQL SERVER 触发器问题
目的:rn当update 表1 中数据时,启动触发器,将那条update的数据中某个字段 insert到另外一个表。rn问题:rn我怎么知道当时update的是哪条数据?rn触发器:rn CREATE TRIGGER [check] ON [dbo].[bank_back] rnfor UPDATE rnASrndeclare @name char(50)rnselect @name=username from bank_back --这个地方怎么找到那条被update的数据rninsert into fsk_ck(un) values(@name)
SQL server触发器问题
产品编号 varchar(10) not null primary key;rn产品名称 varchar(50) not null;rn价格 int null;rn库数量 int null;rnrn在表中创建触发器,向表中插入新记录时,如不给出产品名称,怎样使产品名称自动显示为产品编号?
sql server触发器出错
/*定义一个BEFORE行级触发器,为教师表CM_Teacher定义完整性规则“教授的工资不得低于rn5000元,如果低于4000元的话,自动改为4000元”*/rnCreate Trigger Insert_Or_Update_Sal /*在教师表CM_Teacher上定义触发器*/rn before INSERT OR UPDATE ON CM_Teacher /*触发事件是插入或者更新操作*/rn For Each Row /*这是行触发器*/rn As Beginrn if(CM_Teacher.CM_Teacher_post='教授')and(CM_Teacher.CM_Teacher_salary<5000)thenrn CM_Teacher.CM_Teacher_salary=5000;rn end if;rn End; rnrnrn消息 102,级别 15,状态 1,过程 Insert_Or_Update_Sal,第 4 行rn'before' 附近有语法错误。rn消息 156,级别 15,状态 1,过程 Insert_Or_Update_Sal,第 7 行rn关键字 'then' 附近有语法错误。rnrn另外,我用的是sql server2005
sql server 触发器求解!
需要写一个SQL触发器语句,如果我删除一个用户时,要求根据这个用户的ID删除A表 B表对应该用户的数据,同时根据这个用户的ID 删除另外6个数据库中A表 B表对应的数据,请问这个触发器该怎么写?
SQL server触发器提问
create trigger Course_CNO_Listrnon Coursernfor insert asrndeclare @Course_CNO int rnselect @Course_CNO=CNO from insertedrnif(@Course_CNO not in(select CNO from Course))rnbeginrnrollback transactionrnraiserror('请输入课程号,%d不在Course中,请重新输入!',16,2,@Course_CNO)rnendrnrnrn这这个代码的意思是当我满足if条件的时候,就顺利的插入数据,否则就执行rnraiserror('请输入课程号,%d不在Course中,请重新输入!',16,2,@Course_CNO)rn但当不满足条件的时候为什么不出现rnraiserror('请输入课程号,%d不在Course中,请重新输入!',16,2,@Course_CNO)rn这个提示?
Sql Server 建触发器
请问各位:rn 如何使用SQl Server 建立触发器;
sql server 触发器问题.
alter trigger user_countrnon userinfornfor insertrnas rninsert into loginlog(lastloginip) values('-----');rn上面是个比较简单的 触发器.rn我想写一个插入时触发的触发器.可是我没有思路,不知道怎么写,请大家教教我.rn比如表结构是这样的rncreate table userInforn(rnuserId int,rnuserName varchar(20),rncount int,rn)rn比如插入这么一条数据,inser into userInfo values(1,"username",1)rn触发器要实现这样把刚刚插入的数据username的值取出来.rn能实现这样的功能吗?应该怎么实现啊,大家能不能提供一点思路给我,谢谢
SQL Server 触发器问题
触发器调用一个存储过程后,rn不执行存储过程后面的代码,rn如何让触发器再调用另一个存储过程?
sql server触发器语法
create table t_shurn(rn sjid int,rn zjid int primary key,rn zjmc varchar(50),rn zjjs varchar(100)rn)rngorninsert into t_shu rnvalues(-1,0,'工资管理系统','本着以人为本,服务社会的宗旨向广大人民群众……')rninsert into t_shu rnvalues(0,1,'部门管理','本着以人为本,服务社会的宗旨向广大人民群众……')rnrncreate table t_partrn(rn p_id int identity(1,1) primary key, rn zjid int references t_shu(zjid), rn p_name Varchar(50), rn p_address Varchar(100), rn p_remark text rn)rngornrninsert into t_part values(1,'开发部门','A座306','开发')rnrn当我在 t_part表里增加的时候 触发 t_shu 里也增加条数据,t_shu表的增加的值rn求zjid: select max(a.zjid) from t_shu as arn(sjid=1,zjid=zjid+1,zjmc=p_name,zjjs=固定值)rn求高人帮我写触发器~~~~谢谢~~
SQL Server触发器基础
SQL Server触发器基础 建立一个删除触发器 create trigger trig_MealRecords on [dbo].[MealRecords] after delete as begin insert into[dbo].[MealRecords_bk] select * from deleted end 删除触发器 drop trigger trig_pass...
sql server 触发器问题
比如,我这个表有一个记录,存放的是临时密码,用asp页面更新它之后,不调用asp页面,让sql server在三分钟之后再更新它一次,这样就起到临时密码三分钟后无效的效果rnrnrn我现在做了个触发器,是这样的rnCREATE TRIGGER [forupdate] ON [dbo].[pwd] rnFOR UPDATE rnASrnbeginrnwaitfor delay '00:03:00'rnupdate pwd set pwd='8260' where id=1rnendrn却又出现了问题rnasp的提交页面竟然要3分钟才完成提交,这是怎么回事?rn怎样做成这样的效果?
SQL SERVER的触发器的消息传输
我想用SQL SERVER的触发器,接受数据库的INSERT动作,并产生一个信息,发送到局域网内的另一台或几台计算机上,这个触发器中的信息怎么定义?传输如何操作?望专家指导!rn谢!!rn
SQL Server触发器应用?
有一个课题:运用 SQL Server 2000触发器insert、delete表当对库中表进行删除等修改时,触发器就触发纪录修改并以邮件附件发送给另一个客户机,客户机从邮件附件中读取信息同时更新本地数据库表。有没有高手能指教一下如何实现? rn
SQL Server触发器
1、理解触发器的作用和工作机制; 2、熟练掌握后触发器和替代触发器的区别; 3、熟练掌握后触发器和替代触发器的创建。
SQL server 触发器问题.
现在有2张表rntable1 字段 a(vachar(20)), b(float), c(datetime) IP地址:192.168.0.1rnrntable2 字段 a(vachar(20)), b(float), f(datetime) IP地址:192.168.0.2rnrn现在需要当table1中有数据插入时,将插入的数据同步到table2中.rn字段对应关系为a-->a b-->b c-->frnrn由于我的触发器还不是很了解,还请各位帮忙写个触发器,或者有比触发器更好的实现方式也行.谢谢.rnrn如果table1用的数据库是SQL server 2005 table2用的数据库是SQL server 2008 会不会存在兼容问题呢?rnrn
sql server 2000 触发器
我对我 sql server 2000 中的表1修改了2次。其中有一个字段是流程状态默认值是0,修改第一次的时候流程状态为1,修改第二次的时候流程状态时2.当流程状态修改为2的时候。把表1这条数据删除,插入入另一个表2。rn表1字段为:rn 姓名 varchar 20 rn 年龄 int 4 rn 性别 varchar 2 rn 学校 varchar 20 rn 班级 varchar 10 rn 年级 varchar 10 rn 身份证 varchar 30 rn 联系方式 varchar 30rn 流程状态 int 4rn表2字段为:rn 类型 varchar 4 (入校) rn 日期 varchar 10 (默认插入当前时间)rn 原因 varchar 100 (开学入校)rn 姓名 varchar 20 rn 年龄 int 4 rn 性别 varchar 2 rn 学校 varchar 20 rn 班级 varchar 10 rn 年级 varchar 10 rn 身份证 varchar 30 rn 联系方式 varchar 30rn 流程状态 int 4rn rnrnrn这个怎么解决,第一次接触到触发器,请高手们指点指点。rn
sql server触发器的问题
有一个业务需要用到触发器:当users表中的某个user的信息被更新或者有新的user被insert进来的话,就把更新了的user信息或者新insert的user信息插入到另一个表backUpUsers.rn我这边用到的是after update,insert的写法,然后从inserted内存表中拿user的数据。但是执行后发现,更新了的user信息可以插入到backUpUsers表中,但是更新前的那个user信息也会插入到backUpUsers表中。rn不知道说清楚没有,举个例子吧:rnrnusers表rn user_id user_name user_age user_tel user_addressrn1 s1234567A tester1 20 13787346725 beijingrn2 s1234567B tester2 20 15876239087 sichuanrnrnbackUpUsers表rn user_id user_name user_age user_tel user_address backUp_dtern1 s1234567A tester1 20 13787346725 beijing 2013-08-12rn2 s1234567B tester2 20 15876239087 sichuan 2013-08-13rnrn此时,users表中的user s1234567A的电话和住址被更新了,那么此时就要通过触发器把更新后的user s234567A重新insert到backUpUsers表中去,正确的情况下,backUpUsers表中的数据应该是这样:rnbackUpUsers表rn user_id user_name user_age user_tel user_address backUp_dtern1 s1234567A tester1 20 13787346725 beijing 2013-08-12rn2 s1234567B tester2 20 15876239087 sichuan 2013-08-13rn3 s1234567A tester1 20 13087652378 shanghai 2013-08-14rnrn但是现在却成了这样:rnbackUpUsers表rn user_id user_name user_age user_tel user_address backUp_dtern1 s1234567A tester1 20 13787346725 beijing 2013-08-12rn2 s1234567B tester2 20 15876239087 sichuan 2013-08-13rn3 s1234567A tester1 20 13787346725 beijing 2013-08-12rn4 s1234567A tester1 20 13087652378 shanghai 2013-08-14rnrn也就是说,在insert更新的信息同时也把原来的user s1234567A又重新insert到backUpUsers表中,这个是不对的,那为什么会出现这种情况呢,希望大家可以帮着分析一下!!!rnrnrn
sql server中的触发器:
我的表中在四个字段:(ID,intsl,intdj,intJe)rn我想在改变intsl.intdj.两个字段时,ihtje字段值为:rnintJe=intsl*intdj:rn这功能如何有触发器中实现?
sql Server触发器,急
需求如下: 单表 操作 rn 字段有A.B.C.D(均不为主键),A可以手工录入也可以通过B的值触发,若B=0时不触发,若满足B<>0、C<>0时触发,此时 A=B*1000/C*D,不满足不触发,触发时机是单据保存时,一个单据有多行这样的记录时都需要符合上述逻辑。求写一个触发器
sql server数据库编程触发器
sql server 吴京慧 刘爱红 廖国琼 刘喜平编著数据库系统原理与设计实验教程第二版触发器
SQL Server触发器的问题
请问:rn在触发器中能运行存储过程吗(该存储过程带有一个输入参数)?rn如能,请给一小段代码。rn非常感谢!
sql server 触发器
表具有带层叠的update的foreing key时该怎么处理??、
SQL SERVER触发器问题
我有二个表rntemp表中有字段rna int,(自动加1主键)rnb varchar(18)rnc Varchar(15)rnd moneyrne char(1)rnrntemp2表中有字段rnta int,(自动加1主键)rntb varchar(18)rntc moneyrntd char(1)rnrn问题我想写二个触发器.rn一个触发器完成如下功能 rn当temp增加一条记录,对应temp也增加一个记录,功能完成,触发器如下.rnCREATE TRIGGER [Inserttemp2] ON [dbo].[temp]rnFOR INSERTrnASrn declare @b Varchar(18),@c money;rn select @b=a,@b=b from insertedrn rn insert into StoctS(tb,tc)rn values(@b,@c)rnrn第二个触发器想请教大家rn当temp表中的 e 字段更改时,把对应的值写到temp2表中的字段 td 也更改.rn(说明只有temp表中的 e 字段有更改才触发,temp表中的其它字段更改不产生触发)
求助一个SQL Server编程问题
怎么做一个学生考试的系统,有学生信息(姓名,学号,等信息),课程信息(课程编号,课程名字等),考试信息,学生可以选择一个课程进行考试!求大家帮忙!!!
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件