sqlserver数据库alter语句如何嵌套select

需求:表cleanInfo中_dorNum(非主键)输入的东西只能是表basicStuInfo中_dorNum列已经存在的值... 需求:表cleanInfo中_dorNum(非主键)输入的东西只能是表basicStuInfo中_dorNum列已经存在的值 展开
 我来答
百度网友e7b6a5ad0
推荐于2016-05-02 · TA获得超过175个赞
知道小有建树答主
回答量:222
采纳率:100%
帮助的人:209万
展开全部
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
追问
这个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

都测试过了

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式