Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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_Entity Framework - Fatal编程技术网

如果具有相同日期的记录已经过多,sql server能否决定客户端是否可以写入记录?

如果具有相同日期的记录已经过多,sql server能否决定客户端是否可以写入记录?,sql,sql-server,entity-framework,Sql,Sql Server,Entity Framework,甚至不知道如何搜索类似的内容,但例如: First Table: Id, Date, Maximum records Second Table: Id, Date, more properties 是否可以在服务器端定义一些规则,如果第二个表中有太多相同日期的记录,并且超过了第一个表中当前日期的最大记录值,那么服务器将抛出错误或某种异常,从而阻止对该日期进行sql insert查询 可能的: First Table: 1,Date1,2 Second Table:(Maximum 2 on D

甚至不知道如何搜索类似的内容,但例如:

First Table:
Id, Date, Maximum records
Second Table:
Id, Date, more properties
是否可以在服务器端定义一些规则,如果第二个表中有太多相同日期的记录,并且超过了第一个表中当前日期的最大记录值,那么服务器将抛出错误或某种异常,从而阻止对该日期进行sql insert查询

可能的:

First Table:
1,Date1,2
Second Table:(Maximum 2 on Date 1)
1,Date3,...
2,Date1,...
3,Date1,...
不可能:

First Table:
1,Date1,2
Second Table:(Maximum 2 on Date 1)
1,Date3,...
2,Date1,...
3,Date1,...
4,Date1,...

如果无法做到这一点,那么在使用实体框架的windows窗体应用程序上实现此类检查的最佳方法是什么?

简短的回答是肯定的


您需要编写一个(作为insert、delete和update语句执行的一部分执行的一种特殊类型的存储过程)来强制执行约束,因为它们不能在关系模式中表达。缺点是,与某些SQL实现不同,SQL Server触发器在insert、delete或update语句的所有工作完成后触发:如果触发器验证失败,事务将回滚,这意味着可能需要撤消大量工作。

您可以使用
触发器来拒绝插入。有一个可能的MySQL解决方案。类似的东西可能适用于SQL Server这似乎是数据库设计的一个奇怪要求。你在做什么导致你有这个要求?@ScottChamberlain我一次会有很多正在运行的应用程序,它们会检查当前的数据库表。如果来自许多应用程序的人希望在最后一个剩余位置(特定日期)插入记录,我希望服务器验证,而不是客户端应用程序验证,因为可能会出现超时等情况。@M.J.这是一个很容易解决的常见问题,根本不需要使用单独的表。所有这些都可以通过服务器上的事务和存储过程来完成。不要陷入“我建议问一个新问题”的困境,并解释您正在尝试做什么以及您面临的挑战(如让服务器而不是客户端进行验证),然后问“我如何解决此问题?”而不是“我如何实现此解决方案(针对我没有告诉您的问题)?”@ScottChamberlain好的,谢谢你的解释,我可能会提出这个问题,而不是这个问题