Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查约束sql server_Sql_Sql Server - Fatal编程技术网

检查约束sql server

检查约束sql server,sql,sql-server,Sql,Sql Server,我有你在图中看到的桌子 那么我想做什么。。。? 我想做一个限制,检查ID可以重复两次,但不能超过同一张表中的检查次数,就像他在2018-01-01考试时,他可以在15天后重复考试一样。。。? 这意味着你有机会在一个月内重复考试两次,而不是更多 我做一个 ALTER TABLE [dbo].[ESAMI] ADD CONSTRAINT CHK_ColumnD_ESEMI CHECK > 2 但不起作用 那我该怎么做呢? 提前感谢。你应该写: ALTER TABLE [dbo].[ESAM

我有你在图中看到的桌子

那么我想做什么。。。? 我想做一个限制,检查ID可以重复两次,但不能超过同一张表中的检查次数,就像他在2018-01-01考试时,他可以在15天后重复考试一样。。。? 这意味着你有机会在一个月内重复考试两次,而不是更多

我做一个

ALTER TABLE [dbo].[ESAMI]
ADD CONSTRAINT CHK_ColumnD_ESEMI CHECK > 2
但不起作用

那我该怎么做呢? 提前感谢。

你应该写:

ALTER TABLE [dbo].[ESAMI]
ADD CONSTRAINT CHK_ColumnD_ESEMI UNIQUE(IdEsami)
你应该写:

ALTER TABLE [dbo].[ESAMI]
ADD CONSTRAINT CHK_ColumnD_ESEMI UNIQUE(IdEsami)

多亏了丹尼斯先生,我找到了解决办法

您必须首先创建如下函数:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION DBO.ESAMI_CHECK
(
    -- Add the parameters for the function here
    @IdStudente INT
)
RETURNS INT

AS
BEGIN
    RETURN (
        SELECT COUNT(*) 
        FROM ESAMI WHERE IdStudente=@IdStudente
        GROUP BY IdStudente 
    )   
END
GO
ALTER TABLE [dbo].[ESAMI]
ADD CONSTRAINT CHK_ColumnD_ESEMI
CHECK (DBO.ESAMI_CHECK(IdStudente) <= 2)
之后,必须按如下方式进行约束:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION DBO.ESAMI_CHECK
(
    -- Add the parameters for the function here
    @IdStudente INT
)
RETURNS INT

AS
BEGIN
    RETURN (
        SELECT COUNT(*) 
        FROM ESAMI WHERE IdStudente=@IdStudente
        GROUP BY IdStudente 
    )   
END
GO
ALTER TABLE [dbo].[ESAMI]
ADD CONSTRAINT CHK_ColumnD_ESEMI
CHECK (DBO.ESAMI_CHECK(IdStudente) <= 2)
ALTER TABLE[dbo].[ESAMI]
添加约束CHK_ColumnD_ESEMI

CHECK(DBO.ESAMI_CHECK(IdStudente)多亏了丹尼斯先生,我找到了解决方案

您必须首先创建如下函数:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION DBO.ESAMI_CHECK
(
    -- Add the parameters for the function here
    @IdStudente INT
)
RETURNS INT

AS
BEGIN
    RETURN (
        SELECT COUNT(*) 
        FROM ESAMI WHERE IdStudente=@IdStudente
        GROUP BY IdStudente 
    )   
END
GO
ALTER TABLE [dbo].[ESAMI]
ADD CONSTRAINT CHK_ColumnD_ESEMI
CHECK (DBO.ESAMI_CHECK(IdStudente) <= 2)
之后,必须按如下方式进行约束:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION DBO.ESAMI_CHECK
(
    -- Add the parameters for the function here
    @IdStudente INT
)
RETURNS INT

AS
BEGIN
    RETURN (
        SELECT COUNT(*) 
        FROM ESAMI WHERE IdStudente=@IdStudente
        GROUP BY IdStudente 
    )   
END
GO
ALTER TABLE [dbo].[ESAMI]
ADD CONSTRAINT CHK_ColumnD_ESEMI
CHECK (DBO.ESAMI_CHECK(IdStudente) <= 2)
ALTER TABLE[dbo].[ESAMI]
添加约束CHK_ColumnD_ESEMI

支票(DBO.ESAMI_支票(IdStudente)样本数据和期望的结果真的会有帮助。你想说的…?样本数据和期望的结果真的会有帮助。你想说的…?和我的意思一样,但在我添加例如:IdStudente 1时不起作用,重复3次它被接受,当它超过两次时,这不是我想要的s您想要的是
唯一的
约束。我编辑了答案。即使这样,当我遇到问题时也不起作用,这是相同的结果,意思是当我做出(idstudent 1)时三次被接受。你的意思是,每个ID至少应该有三行?这意味着当like ID=1时,他有权在2018-12-01的15天后进行考试,即2018-12-16。并且没有权利在一个月内进行更多的考试。这与我的相同,但当我添加like ex:IdStudente 1时,它不起作用,并重复3次,它接受了,而不是我想要的,当它超过两次时,我想你想要的是
唯一的
约束。我编辑了答案。即使这样在我遇到时也不起作用,这是相同的结果,意思是当我做出(idstudent 1)时三次被接受。你的意思是,每个ID至少应该有三行?这意味着当like ID=1时,他有权在2018-12-01的15天后进行考试,即2018-12-16。并且无权在本月进行更多的考试