--建自定义约束. CREATE TABLE CheckTbl (col1 int, col2 int); GO CREATE FUNCTION CheckFnctn(@col1 INT,@col2 INT) RETURNS bit AS BEGIN DECLARE @RETURN BIT IF @col1=@col2 BEGIN SET @RETURN=0 END ELSE BEGIN SET @RETURN=1 END RETURN @RETURN END; GO ALTER TABLE CheckTbl ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn(col1,col2)= 1 ); GO
楼上的楼上的答案我没看懂 楼主说"某两列不能同时相同",是建立unique index么
unique index可以支持列么?
colA<>colB如果你的表已经建立,那么在企业管理器,设计表,管理约束上,新建如上约束即可
建立触发器: create trigger trigger_A on table for insert,update as decalre @col1 varchar(10) select @col1=(select col1 from inserted) decalre @col2 varchar(10) select @col2=(select col2 from inserted) if @col1=@col2 raiserror 'Col1与Col2列重复!',16,1 此仅针对插入或修改一条记录时有效,若需同时操作多条记录,则需作修改.
To [jwt1982(飞星)]: 楼上的,主键虽然可以多列,但仅限制多列主键间的组合唯一,而不能限制两列值不能相同!
CREATE TABLE CheckTbl (col1 int, col2 int);
GO
CREATE FUNCTION CheckFnctn(@col1 INT,@col2 INT)
RETURNS bit
AS
BEGIN
DECLARE @RETURN BIT
IF @col1=@col2
BEGIN
SET @RETURN=0
END
ELSE
BEGIN
SET @RETURN=1
END
RETURN @RETURN
END;
GO
ALTER TABLE CheckTbl
ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn(col1,col2)= 1 );
GO
楼主说"某两列不能同时相同",是建立unique index么
create trigger trigger_A on table for insert,update
as
decalre @col1 varchar(10) select @col1=(select col1 from inserted)
decalre @col2 varchar(10) select @col2=(select col2 from inserted)
if @col1=@col2 raiserror 'Col1与Col2列重复!',16,1
此仅针对插入或修改一条记录时有效,若需同时操作多条记录,则需作修改.
楼上的,主键虽然可以多列,但仅限制多列主键间的组合唯一,而不能限制两列值不能相同!
[comname] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[ma] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GOALTER TABLE [dbo].[test] ADD
CONSTRAINT [CK_test] CHECK ([comname] <> [ma])
GO--测试,相同则出错
insert into test
select 'a','a'