sqlserver数据库alter语句如何嵌套select
需求:表cleanInfo中_dorNum(非主键)输入的东西只能是表basicStuInfo中_dorNum列已经存在的值...
需求:表cleanInfo中_dorNum(非主键)输入的东西只能是表basicStuInfo中_dorNum列已经存在的值
展开
展开全部
alter方式是不允许这么做的
您可以这么理解:检查约束是相对静态的
举个例子:
如果basicStuInfo这个张表是空表,那么这个约束将永远不成立
如果想实现这种功能我觉得需要通过代码逻辑进行约束或者使用触发器
//以下是一个触发器的示例
//示例为检查表【Test】的【name】列,如果修改name的值不在表【Test】列【name】中则修改不成功
CREATE TRIGGER [ValueCheck] ON Test
instead of INSERT,Update
AS
declare @Data nvarchar(4000),@count int,@Result varchar(10)
set @Data=(select name From Inserted)
set @count=(select count(1) from test where name=@Data)
if @count>0
begin
set @Result='YES'
end
else
begin
set @Result='No'
end
您可以这么理解:检查约束是相对静态的
举个例子:
如果basicStuInfo这个张表是空表,那么这个约束将永远不成立
如果想实现这种功能我觉得需要通过代码逻辑进行约束或者使用触发器
//以下是一个触发器的示例
//示例为检查表【Test】的【name】列,如果修改name的值不在表【Test】列【name】中则修改不成功
CREATE TRIGGER [ValueCheck] ON Test
instead of INSERT,Update
AS
declare @Data nvarchar(4000),@count int,@Result varchar(10)
set @Data=(select name From Inserted)
set @count=(select count(1) from test where name=@Data)
if @count>0
begin
set @Result='YES'
end
else
begin
set @Result='No'
end
追问
这个result变量的yes 或no能决定添加还是拒绝添加吗?
追答
修改下吧 针对更新和插入
//以下是针对插入的
CREATE TRIGGER ValueCheckForInsert ON Test3
for Insert
AS
begin
declare @Data nvarchar(4000),@count int,@Result varchar(10)
set @Data=(select name From Inserted)
set @count=(select count(1) from Test3 where name=@Data)
if @count<2
begin
print '1'
rollback
end
end
//以下是针对更新的
CREATE TRIGGER ValueCheckForUpdate ON Test3
for update
AS
begin
declare @Data nvarchar(4000)
declare @countBefore int
declare @countAfter int
select @countBefore=COUNT(1) from deleted
select @Data=name From inserted
select @countAfter=COUNT(1) from test3 where name=@Data
if @countAfter<=@countBefore
begin
rollback
end
end
都测试过了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询