带你深入了解T-SQL的十一种设计模式
2008-09-04 10:00:41 来源:WEB开发网3、复制表时指定新数据
select IDENTITY(int,1,1) AS CustNo,*
INTO newCustomers
FROM Customers
注:还可指定新列、通过联接选取来自其他表或视图的列、约束或函数等许多的可能性。
八、Singleton(单例)
此模式目标:确保在任何给定时间只存在一个类实例并且提供访问该实例的路径。
严格说,在关系数据库中,对于面向对象类的等价物是表。类的一个实例就是表中的一行。因此,Singleton模式的最显而意见的实现就是确保表中只包含一行。
create TABLE LastCustNo
(LastCustNo int)
GO
insert LastCustNo VALUES(1)
GO
create TRIGGER LastCustNoinsert ON LastCustNo
FOR insert
AS
IF (select count(*) FROM LastCustNo) > 1
BEGIN
RAISERROR(’You May Not insert more than one row into this table!’,16,10)
ROLLBACK TRAN
END
GO
insert LastCustNo VALUES(2) --由于触发器的原因,插入失败
GO
select * FROM LastCustNo
注:由于触发器的原因,在任何时刻只允许在表中插入一行,如果表中已包含至少一行,在试图插入新的一行时将导致错误并回滚事务。
(1)IF (select count(*) FROM LastCustNo)必须用 > 1 ,而不能用=1,因为除Instead Of触发器外,T-SQL触发器只在操作已完成,但还没提交给数据库前运行,这表明从触发器角度看,在事务回滚前,LastCustNo表看起来总是包含两行。
(2)禁止使用IF exists(select count(*) FROM LastCustNo)测试表中的行,因对于触发器来说,新插入的行直到事务被回滚才出现在表中,因此,即使在插入前表为空,也将禁止向表中插入行。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接