如何使用比较2个表但不返回int的create函数?

时间:2016-04-15 09:16:33

标签: sql-server function

我正在为学校网站编写一个数据库,在Microsoft SQL Server Express中

数据库有很多不同的表,还有很多主键,不允许更改表本身。

问题是我有两张桌子Verkoper& Gebruiker,(抱歉这些名字是荷兰语),这些是2个表格:

create table Verkoper (
    Gebruiker char(10) not null,
    Bank char(8) ,
    Bankrekening int,
    Controle_Optie char(10) not null,
    Creditcard char(19)
    constraint pk_Verkoper primary key(Gebruiker),
    constraint fk_Verkoper_Gebruiker foreign key(Gebruiker)
                             references Gebruiker(Gebruikersnaam)
   )

create table gebruiker(
    Gebruikersnaam char(10) not null,
    Voornaam char(10) not null, 
    Achternaam char (15) not null , 
    Adresregel1 char(25) not null, 
    AdresRegel2 char(25),
    Postcode  char(7) not null,
    Plaatsnaam char(25) not null, 
    Land char(15) not null, 
    GeboorteDag char(10) not null,
    Mailbox char(25) not null,
    Wachtwoord char(15)not null, 
    Vraag int not null,
    Antwoordtekst char(20) not null,
    Verkoper char(4) not null, 
    constraint pk_gebruiker primary key(Gebruikersnaam),
    constraint fk_Gebruiker_Vraag foreign key(Vraag) 
                          references Vraag(Vraagnummer)
   )

我想检查gebruiker.Verkoper = 'wel'(是)或'niet'(否)。如果gebruiker.verkoper = 'niet',则不应允许您将其添加到verkoper表中。 所以简而言之,如果你想在Verkoper中添加一个人,那么gebruiker和verkoper就是2个表格,gebruiker.verkoper必须是真的。

我已经尝试过制作一个功能:

Create function dbo.checkVerkoper()
RETURNS int         
AS BEGIN RETURN( 
  select count(*) 
   from Verkoper
   inner join gebruiker
    on verkoper.gebruiker = gebruiker.gebruikersnaam
    AND gebruiker.verkoper = 'wel'
 ) 
 END
 go

 alter table verkoper
 add constraint ck_VerkoperGebruiker
 check(dbo.checkVerkoper () = 1 )

这适用于1个人,但是如果你添加更多的值将超过1,所以检查将是假的没有人会添加,如果你有4个人,3个是不允许的,1则是该值仍为1,您仍然可以将某人添加到verkoper tabel。

1 个答案:

答案 0 :(得分:0)

您可以编写存储过程 那个

  
      
  • 检查您的条件是否得到满足
  •   
  • 如果符合,则执行插入
  •