我想限制插入数据库表的数据只给出日期和时间12

时间:2018-04-26 10:48:48

标签: sql-server

create procedure SP_insert_test @name varchar(20), @emailid varchar(20), @trainer_name varchar(50), @training_date varchar(50), @training_time varchar(50), @gymname varchar(50) , @success int out as 
begin
   if(
   select
      count(id) 
   from
      Add_Booking_Fitness_Training 
   where
      training_time = @training_time) > 11 print N'Number of Booking Is Complete for this time and date plz book other time';
else
   insert into
      Add_Booking_Fitness_Training(memeber_name, member_emailid, trainer_name, training_date, training_time, gymname) 
   values
      (
         @name,
         @emailid,
         @trainer_name,
         @training_date,
         @training_time,
         @gymname
      )
      SELECT
         SCOPE_IDENTITY() 
      set
         @success = 1;
end
begin
      set
         @success = 0;
end
我有一张桌子,其中我要插入数据时只有12个成员可以在那之后插入他们得到的消息列表是完整的plz更改插入时间我创建程序其工作时其到达数量12比它显示我的消息但当我改变时间时它也向我显示相同的消息而不是将任何数据插入数据库

喜欢26/04/2018,'6:00'我想在12之后只插入此值12次这显示我关于数字限制的信息是达到plz更改(时间)

Create table Add_Booking_Fitness_Training ( id int identity primary key,
                                            memeber_name varchar(20),
                                            member_emailid varchar(20),
                                            trainer_name varchar(50),
                                            training_date varchar(50),
                                            training_time varchar(50),
                                            gymname varchar(50))

我只是想在这个表中插入一个值只有12次给一个给定时间如(6:00)如果插入值的数量达到12比它显示我的消息数值插入到达12请改变时间。

我想将值输入表中仅12次为给定时间6:00Am时值插入表12时间比消息出现更改时间比插入值更改时间

1 个答案:

答案 0 :(得分:1)

老实说,我在这里完全猜测,我仍然不知道你在问什么。

认为 OP的声明“我希望将值输入表格仅12次,当值插入时为6:00Am表格12比消息更改时间的时间比更改时间的插入值更长。“表示他们只希望时间在表格中出现最多12次。如果看起来不止这样,则INSERT会失败。

这可以通过检查约束和标量函数来实现。所以,作为一个非常简单的例子:

USE Sandbox;
GO
--Create a very simple table
CREATE TABLE SampleTable (TrainingTime datetime2(0));
GO

--Create the scalar function
CREATE FUNCTION TrainingAtTime (@TrainingTime datetime2(0))
RETURNS INT
AS BEGIN

    DECLARE @Trainees int;

    SELECT @Trainees = COUNT(*)
    FROM SampleTable
    WHERE TrainingTime = @TrainingTime;

    RETURN @Trainees;
END

GO
--Add the check constraint
ALTER TABLE SampleTable ADD CONSTRAINT MaxTrainees CHECK (dbo.TrainingAtTime(TrainingTime) <= 12) ;
GO
--Insert first trainee
INSERT INTO SampleTable
VALUES ('2018-04-26T06:00:00');
--It works
SELECT TrainingTime, COUNT(*) AS Trainees
FROM SampleTable
GROUP BY TrainingTime;
GO
--insert 11 more
INSERT INTO SampleTable
VALUES ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00'),
       ('2018-04-26T06:00:00');
--It works
SELECT TrainingTime, COUNT(*) AS Trainees
FROM SampleTable
GROUP BY TrainingTime;
GO
--Try to insert another
INSERT INTO SampleTable
VALUES ('2018-04-26T06:00:00');
--It fails
SELECT TrainingTime, COUNT(*) AS Trainees
FROM SampleTable
GROUP BY TrainingTime;
GO
--Use a different time
INSERT INTO SampleTable
VALUES ('2018-04-26T08:00:00');
--it works
SELECT TrainingTime, COUNT(*) AS Trainees
FROM SampleTable
GROUP BY TrainingTime;
GO

--Clean up
DROP TABLE SampleTable; 
DROP FUNCTION TrainingAtTime;
GO

如果这不是您所追求的,不幸的是由于语言障碍(并且没有问题),我不理解您的要求。