
下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
/*INSTEAD OF 触发器的主要优点是可以使不能更新的视图支持更新。包含多个基表的视图必须使用 INSTEAD OF 触发器来支持引用表中数据的插入、更新和删除 *** 作。INSTEAD OF 触发器的另一个优点是使您得以编写这样的逻辑代码:可以拒绝批处理中的某些部分同时允许批处理的其它部分成功。INSTEAD OF 触发器可以进行以下 *** 作: 忽略批处理中的某些部分。不处理批处理中的某些部分并记录有问题的行。如果遇到错误情况则采取备用 *** 作。 说明 在含有用 DELETE 或 UPDATE *** 作定义的外键的表上,不能定义 INSTEAD OF DELETE 和 INSTEAD OF UPDATE 触发器。将此逻辑作为 INSTEAD OF 触发器的一部分进行编码,可避免所有访问数据的应用程序必须重新执行该逻辑。在下列 Transact-sql 语句序列中,INSTEAD OF 触发器更新视图中的两个基表。另外,显示两种处理错误的方法: 忽略对 Person 表的重复插入,并且插入的信息将记录在 PersonDuplicates 表中。将对 Employeetable 表的重复插入转变为 UPDATE 语句,该语句将当前信息检索至 Employeetable,而不会产生重复键侵犯。 Transact-sql 语句创建两个基表、一个视图、一个记录错误表和视图上的 INSTEAD OF 触发器。下面的这些表将个人数据和业务数据分开并且是视图的基表:*/CREATE table Person ( SSN char(11) PRIMARY KEY,name nvarchar(100),Address nvarchar(100),Birthdate datetime )CREATE table Employeetable ( EmployeeID int PRIMARY KEY,SSN char(11) UNIQUE,Department nvarchar(10),Salary money,CONSTRAINT FKEmpPer FOREIGN KEY (SSN) REFERENCES Person (SSN) )--下面的视图使用某个人的两个表中的所有相关数据建立报表:CREATE VIEW Employee ASSELECT P.SSN as SSN,name,Address,Birthdate,EmployeeID,Department,SalaryFROM Person P,Employeetable EWHERE P.SSN = E.SSN--可记录对插入具有重复的社会安全号的行的尝试。PersonDuplicates 表记录插入的值、尝试插入 *** 作的用户的用户名和插入的时间:CREATE table PersonDuplicates ( SSN char(11),name nvarchar(100),Address nvarchar(100),Birthdate datetime,InsertSname nchar(100),WhenInserted datetime )--INSTEAD OF 触发器在单独视图的多个基表中插入行。将对插入具有重复社会安全号的行的尝试记录在 PersonDuplicates 表中。将 Employeetable 中的重复行更改为更新语句。CREATE TRIGGER IO_Trig_INS_Employee ON EmployeeINSTEAD OF INSERTASBEGINSET NOCOUNT ON-- Check for duplicate Person. If no duplicate,do an insert.IF (NOT EXISTS (SELECT P.SSN FROM Person P,inserted I WHERE P.SSN = I.SSN)) INSERT INTO Person SELECT SSN,Comment FROM insertedELSE-- Log attempt to insert duplicate Person row in PersonDuplicates table. INSERT INTO PersonDuplicates SELECT SSN,SUSER_Sname(),GETDATE() FROM inserted-- Check for duplicate Employee. If no duplicate,do an insert.IF (NOT EXISTS (SELECT E.SSN FROM Employeetable E,inserted WHERE E.SSN = inserted.SSN)) INSERT INTO Employeetable SELECT EmployeeID,SSN,Salary,Comment FROM insertedELSE--If duplicate,change to UPDATE so that there will not--be a duplicate key violation error. UPDATE Employeetable SET EmployeeID = I.EmployeeID,Department = I.Department,Salary = I.Salary,Comment = I.Comment FROM Employeetable E,inserted I WHERE E.SSN = I.SSNEND
以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的SQL Server 2005中导入或覆盖数据全部内容,希望文章能够帮你解决SQL Server 2005中导入或覆盖数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)