首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

#这样的UNIQUE INDEX有没有办法建解决方法

2012-01-19 
#这样的UNIQUE INDEX有没有办法建在我的TABLE里有一个deleteflag唯一值的情况是COLUMN1+COLUMN2+(deletefl

#这样的UNIQUE INDEX有没有办法建
在我的TABLE里有一个deleteflag
唯一值的情况是COLUMN1+COLUMN2+(deleteflag=0)


也就是说
表中有数据
Column1         column2         deleteFalg
a                     b                     1
a                     b                     1
a                     b                     0

只有COLUMN1+COLUMN2+(deleteflag=0)
我要建这样的unique   index可行吗?


或许只能CONSTRAINT
那这样的CONSTRAINT   EXPESSION怎么写呢?


[解决办法]
楼主的问题可以用触发器解决:
CREATE TRIGGER [chk_data] ON [dbo].[Table2]
FOR INSERT, UPDATE
AS
if update(deleteFalg)
begin
if exists(select * from inserted where deleteFalg = 0)
begin
if exists(select * from Table2
join inserted on Table2.Column1 = inserted.Column1
and Table2.Column2 = inserted.Column2
and Table2.deleteFalg = inserted.deleteFalg
where Table2.id <> inserted.id and inserted.deleteFalg = 0)
begin
print '写入数据错误! '
rollback transaction
end
end
end

上边的代码假定你的表名是Table2,id是这个表的主键,另外三列和楼主定义的一样。

[解决办法]
如果一定要使用约束的话,需要先定义一个用户自定义函数,然后在约束中引用这个用户自定义函数。因为你的业务规则比较的复杂,用简单的约束是没法实现的。

热点排行