检查引用另一个表的约束

时间:2014-03-22 05:51:31

标签: sql-server

有一个情况  2个不同的表

 CREATE TABLE albums(
            album_id int identity (10,5) not null,
            album_title varchar (40) not null,
            album_itunes_price decimal DEFAULT 12.99 not null,
            album_group_id int not null,
            album_copies_sold int DEFAULT 0 null
            )
go



 CREATE TABLE SONGS
 (song_id int identity (5,5) not null,           
 song_title varchar (50) not null,         
 song_group_id int not null,     
 song_album_id int null,
 song_time time not null,
 song_itunes_cost money not null )

 GO

 ALTER TABLE songs
ADD 

CONSTRAINT pk_song_id
PRIMARY KEY (song_id),

CONSTRAINT fk_song_album_id
FOREIGN KEY (song_album_id)
REFERENCES albums(album_id),

CONSTRAINT fk_song_group_id
FOREIGN KEY (song_group_id)
REFERENCES groups(group_id)

go

在名为ck_songs_itunes_cost的歌曲表上创建一个检查约束 这些歌曲可以免费,但它们永远不会超过album_itunes_price。

我如何创建这个约束已经工作了12个小时没有任何工作。

1 个答案:

答案 0 :(得分:0)

我认为以下是您的期望:

创建一个从相册表中返回值的函数:

Create function [dbo].[MaxValue]()
returns decimal
as
begin
   declare @retval int
   select @retval=MAX(album_itunes_price) from dbo.albums
   return @retval
end;

然后在可以从专辑表中获取值的歌曲中创建检查约束,因为我们不能在检查约束中使用子查询。

alter table dbo.songs
add constraint ck_songs_itunes_cost 
check (songscolumn < dbo.MaxValue())

根据您的需要使用它。