装修施工

您的位置:首页 >> 装修施工

如何由Sybase向SQLServer移

来源:基隆手机网 时间:2020.06.30

退回触发器 SQL Server中不存在这个命令,因此在向SQL Server移植时,使用了ROLLBACK TRIGGER命令的Sybase存储过程必须被进行修改。在修改带有触发器的数据库表中的数据时,使用ROLLBACK TRIGGER命令容易引起误解,一个ROLLBACK TRIGGER命令只退回触发器以及触发触发器的数据修改,如果已经被提交了,则事务的其它部分会继续,被写到数据库中。因此,事务中的所有语句可能没有被成功地完成,但数据已经被提交了。 下面是Sybase数据库中一个使用ROLLBACK TRIGGER的样例触发器:     CREATE TABLE table1 (a int, b int)  GO  CREATE TRIGGER trigger1 on table1 FOR INSERT  AS  IF EXISTS (SELECT 1 FROM inserted WHERE a = 100)  BEGIN  ROLLBACK TRIGGER with RAISERROR 50000 Invalid value for column a  END  INSERT INTO table2  SELECT a, GETDATE() from inserted  RETURN  GO

在上面的代码中,除非a = 100,则所有插入table1的数据也被作为审计行插入table2中,如果a = 100,ROLLBACK TRIGGER命令被触发,而INSERT命令没有被触发,批命令的其它部分继续执行,这时会出现错误信息,表明在一个INSERT命令中出现了错误。下面是所有的INSERT命令:       BEGIN TRAN  INSERT INTO table1 valueS (1, 1)  INSERT INTO table1 valueS (100,2)  INSERT INTO table1 valueS (3, 3)  GO  SELECT * FROM table1

在执行这些命令后,table1和table2二个数据库表将各有2个记录,Table1表中的值为1智能电总投资项目规模预计接近4万亿元。,1以及3,3,由于ROLLBACK TRIGGER命令占1.04%,第二个INSERT命令没有执行;Table2表中的值为1,(当前日期)以及3,(当前日期),由于当a = 100时ROLLBACK TRIGGER被触发,触发器中的所有处理被中止,100没有被插入到Table2表中。 在SQL Server中模拟这一操作需要更多的代码,外部的事务必须与保存点同时使用,如下所示:     CREATE trigger1 on table1 FOR INSERT  AS  SAVE TRAN trigger1  IF EXISTS (SELECT * FROM inserted WHERE a = 100)  BEGIN  ROLLBACK TRAN trigger1  RAISERROR 50000 ROLLBACK  END  INSERT INTO table2  SELECT a, GETDATE() FROM inserted  GO

这一触发器以一个存储点开始,ROLLBACK TRANSACTION只退回触发逻辑,而不是整个事务(规模要小于Sybases数据库中的ROLLBACK TRIGGER语句。对批命令的修改如下:     BEGIN TRAN  SAVE TRAN save1  INSERT INTO table1 valueS (1, 1)  IF @@error = 50000  ROLLBACK TRAN save1  SAVE TRAN save2  INSERT INTO table1 valueS (100, 1)  IF @@error = 50000  ROLLBACK TRAN save2  SAVE TRAN save3  INSERT INTO table1 valueS (3, 3)  IF @@error = 50000  ROLLBACK TRAN save3  COMMIT TRAN

我们可以发现,改变不可谓不大。由于ROLLBACK TRIGGER命令能够使任何批命令不能成功执行,因此在移植的SQL Server存储过程代码中必须包括另外的逻辑,根据ROLLBACK TRIGGER的使用,这可能是一个艰巨而必要的任务,没有什么捷径可走。如果在移植后所有的ROLLBACK TRIGGER命令被改变为ROLLBACK TRANSACTION,触发器的执行也会发生变化,因此我们应当十分小心。

藤黄健骨丸多久见效
宝宝腹泻拉肚子
江门治疗白癫风医院
手指为什么戳伤
泰州好的白癜风医院
婴儿护脐贴要贴多久