在插入值触发之前检查
我有一个表如下:
CREATE TABLE [dbo].[Vaccination]
(
[MedicalID] [int] NOT NULL PRIMARY KEY,
[VaccineName] [varchar](20) NOT NULL,
[VaccineDate] [date] NOT NULL,
[DoseNo] [int] NOT NULL PRIMARY KEY,
[FacilityName] [varchar](20) NOT NULL,
)
因此,我有一个约束,只能在表中允许2个值:剂量1和剂量2
ALTER TABLE [dbo].[Vaccination]
ADD CONSTRAINT No_of_Doses CHECK ([DoseNo] = 1 OR [DoseNo] = 2)
我想创建一个触发器,而仅在1st确实存在的第二剂量的值仅在第二剂量的情况信息。同样,要插入的第一剂毫无问题。
这是我的尝试:
CREATE TRIGGER Dose1Check
ON [dbo].[Vaccination]
BEFORE INSERT
BEGIN
INSERT INTO [dbo].[Vaccination]
SELECT 22, 'Moderna', '2022-04-22', 1, 'CVS'
WHERE IF EXISTS (SELECT 1
FROM [dbo].[Vaccination]
WHERE [MedicalID] = 22 AND [DoseNo] = 1)
SELECT *
FROM [dbo].[Vaccination];
END
上述触发器的代码的以下部分(独立执行)不允许我插入第一剂量。
INSERT INTO [dbo].[Vaccination]
SELECT 22, 'Moderna', '2022-04-22', 1, 'CVS'
WHERE
IF EXISTS (SELECT 1
FROM [dbo].[Vaccination]
WHERE [MedicalID] = 22 AND [DoseNo] = 1)
SELECT * FROM [dbo].[Vaccination];
这是表的一些值
MedicalID, VaccineName, VaccineDate, DoseNo, FacilityName
14, Moderna, 2022-04-22, 1, Daisy Family Health
14, Moderna, 2022-04-26, 2, Daisy Family health
15, Moderna, 2022-04-28, 1, Daisy Family Health
15, Moderna, 2022-04-22, 2, Daisy Family Health
16, Pfizer, BioNTech, 2022-04-28 1 Daisy Family Health
I have a table as follows:
CREATE TABLE [dbo].[Vaccination]
(
[MedicalID] [int] NOT NULL PRIMARY KEY,
[VaccineName] [varchar](20) NOT NULL,
[VaccineDate] [date] NOT NULL,
[DoseNo] [int] NOT NULL PRIMARY KEY,
[FacilityName] [varchar](20) NOT NULL,
)
So I have a constraint that allows only 2 values into the table: dose 1 and dose 2
ALTER TABLE [dbo].[Vaccination]
ADD CONSTRAINT No_of_Doses CHECK ([DoseNo] = 1 OR [DoseNo] = 2)
I want to create a trigger where the value for 2nd dose to be inserted only if 1st does exist else display an error message. Also the 1st dose to be inserted without any problems.
Here is my attempt to it:
CREATE TRIGGER Dose1Check
ON [dbo].[Vaccination]
BEFORE INSERT
BEGIN
INSERT INTO [dbo].[Vaccination]
SELECT 22, 'Moderna', '2022-04-22', 1, 'CVS'
WHERE IF EXISTS (SELECT 1
FROM [dbo].[Vaccination]
WHERE [MedicalID] = 22 AND [DoseNo] = 1)
SELECT *
FROM [dbo].[Vaccination];
END
The following part of the code of the above trigger, when executed independently, is not allowing me to insert the 1st dose as well.
INSERT INTO [dbo].[Vaccination]
SELECT 22, 'Moderna', '2022-04-22', 1, 'CVS'
WHERE
IF EXISTS (SELECT 1
FROM [dbo].[Vaccination]
WHERE [MedicalID] = 22 AND [DoseNo] = 1)
SELECT * FROM [dbo].[Vaccination];
Here are some values for the table
MedicalID, VaccineName, VaccineDate, DoseNo, FacilityName
14, Moderna, 2022-04-22, 1, Daisy Family Health
14, Moderna, 2022-04-26, 2, Daisy Family health
15, Moderna, 2022-04-28, 1, Daisy Family Health
15, Moderna, 2022-04-22, 2, Daisy Family Health
16, Pfizer, BioNTech, 2022-04-28 1 Daisy Family Health
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,您的示例数据暗示该表具有复合主键
(MedicalId,doseno)
。 ThusYou can check if inserted data contain out of order doseNo with a trigger
db<>fiddle< /a>
First your sample data imply the table has a composite primary key
(MedicalID, DoseNo)
. ThusYou can check if inserted data contain out of order doseNo with a trigger
db<>fiddle