gpt4 book ai didi

c# - 防止在 C# 或 SQL 中插入或更新数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:04 27 4
gpt4 key购买 nike

我有两个表头和项目,它们具有一对多关系。

标题表

Id      StartDate   EndDate 
---------------------------------------
1 1999/1/1 1999/5/1
2 2000/1/1 2000/4/1
3 2000/1/1 2000/5/1

和项目表

Id      HeaderRef   SLRef
-------------------------------------
101 1 201
102 2 201

如何防止使用 HeaderRef=3 添加项目和 SLRef=201因为它有相同的 SLRef ,以及 HeaderRef 的标题行提到它有StartDate and EndDate另一个具有相同 SLRef 的项目引用Header在那个范围内。

最佳答案

假设您使用的是 MS SQL Server,有两种方法可以达到您的要求:

1) 按照其他用户的建议使用触发器。触发器将用于 INSERT/UPDATE,它将检查日期范围并允许添加新值或引发错误。

2) 可以在ItemTable中使用复合主键:

CREATE TABLE [dbo].[ItemTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[HeaderRef] [int] NOT NULL,
[SLRef] [int] NOT NULL,
PRIMARY KEY CLUSTERED
(
[HeaderRef] ASC,
[SLRef] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

现在这将对 ItemTable 施加约束,sql server 将不允许 headerRef 和 SLRef int 值(键)的重复组合。

返回您的 HeaderTable,您可以设置唯一约束以停止重复开始和结束日期的范围

CREATE TABLE [dbo].[HeaderTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[STARTDATE] [datetime] not NULL,
[ENDDATE] [datetime] not NULL,
CONSTRAINT [PK_HeaderTable] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

现在在 HeaderTable 上为开始日期和结束日期创建唯一索引。

/****** Object:  Index [IX_HeaderTable]    Script Date: 03/13/2017 12:24:51 ******/
CREATE UNIQUE NONCLUSTERED INDEX [IX_HeaderTable] ON [dbo].[HeaderTable]
(
[ENDDATE] ASC,
[STARTDATE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

您还可以在 HeaderTable 上设置另一个约束,以检查开始日期是否不能早于结束日期。

ALTER TABLE [dbo].[HeaderTable]  WITH CHECK ADD  CONSTRAINT [CheckEndLaterThanStart] CHECK  (([ENDDATE]>=[STARTDATE]))
GO

ALTER TABLE [dbo].[HeaderTable] CHECK CONSTRAINT [CheckEndLaterThanStart]
GO

希望这对您有所帮助!

关于c# - 防止在 C# 或 SQL 中插入或更新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42760510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com