首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >检查合同是否与另一个合同查询相冲突

检查合同是否与另一个合同查询相冲突
EN

Database Administration用户
提问于 2021-04-17 16:52:42
回答 1查看 121关注 0票数 -1

如下图所示,我有一个带有这些表的数据库:

用户可以创建一个新的合同,每个合同可能有一个或多个商店和这些商店的状态变化取决于合同,一切都完美的工作到现在。我在续约的问题,我有一个功能,允许用户续签合同,在这种情况下,我得到所有的原始合同信息,并使新的合同从原始合同的结束日期+1天与相同的原始合同信息。

我在这里的问题是如何检查这个续约合同是否与同一客户和同一家商店的其他合同相冲突(客户可以有许多合同)。

例如:

我有这样的合同:

代码语言:javascript
运行
AI代码解释
复制
con_id    shop_id   start_date    end_date
--------------------------------------------
  1         1       14-04-2021    14-04-2022
  2         1       15-04-2022    15-04-2023

如果用户单击合同号1并尝试更新它,我想要一个查询来检查新合同开始日期是否与该用户和这些商店的其他合同冲突。

与我上面的数据一样,我希望阻止用户再次更新合同号1,因为在这段时间内已经有了续约的合同。

我创建了contracts_view,这个视图将发布的商店ID添加到合同中,因此它显示了合同的所有合同信息和相关的商店ID,视图如下:

代码语言:javascript
运行
AI代码解释
复制
SELECT CN.ID, CN.cust_id, C.name, CSH.shop_id, CN.duration, CN.price, CN.tax, 
CN.usage, CN.rent_type, CN.price2, CN.note2, CN.date_start, CN.date_end, 
CN.note, CN.app_user
FROM contracts CN CROSS apply
(SELECT STRING_AGG(CSH.shop_id, '-') AS shop_id FROM contracts_shops CSH 
 WHERE CSH.contract_id = CN.ID) CSH CROSS apply
(SELECT C.name AS name FROM customers C WHERE C.cust_id = CN.cust_id) C

这就是我试过的:

代码语言:javascript
运行
AI代码解释
复制
--IF EXISTS (SELECT * FROM contracts_view where cust_id=123456789 and @date_start >= date_start and @date_start <= date_end and shop_id in (select shop_id from contracts_shops where contract_id =@old_contract_id)) 
--BEGIN
--    SELECT @ErrorMessage = ERROR_MESSAGE()
--  RAISERROR ('asdasd', 10, 1)
--  ROLLBACK TRAN
--   return
--END

这是我续约的存储过程:

代码语言:javascript
运行
AI代码解释
复制
ALTER PROCEDURE [dbo].[contract_renew]
-- Add the parameters for the stored procedure here
@cust_id int,
@duration int,
@price decimal(10,2),
@tax decimal(10,2),
@usage nvarchar(20),
@rent_type nvarchar(10),
@price2 decimal(10,2),
@note2 nvarchar(max),
@date_start date,
@date_end date,
@note nvarchar(max),
@app_user nvarchar(20),
@old_contract_id int
AS
BEGIN

DECLARE @ErrorMessage NVARCHAR(MAX)
DECLARE @ID int

BEGIN TRAN
BEGIN TRY

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

--insert data
INSERT INTO [dbo].[contracts]
       ([cust_id]
       ,[duration]
       ,[price]
       ,[tax]
       ,[usage]
       ,[rent_type]
       ,[price2]
       ,[note2]
       ,[date_start]
       ,[date_end]
       ,[note]
       ,[app_user])
 VALUES
       (@cust_id,
       @duration,
       @price,
       @tax,
       @usage,
       @rent_type,
       @price2,
       @note2,
       @date_start,
       @date_end,
       @note,
       @app_user) SELECT SCOPE_IDENTITY();

       SET @ID = SCOPE_IDENTITY();


insert into contracts_shops (contract_id, shop_id)
select @ID, shop_id
FROM contracts_shops WHERE contract_id = @old_contract_id;

COMMIT

END TRY
BEGIN CATCH
    SELECT @ErrorMessage = ERROR_MESSAGE()
    RAISERROR (@ErrorMessage, 10, 1)
    ROLLBACK TRAN
END CATCH
END
EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-04-19 04:17:15

此查询将在contracts_view中搜索并检查其他任何活动合同之间的新合同开始日期:

代码语言:javascript
运行
AI代码解释
复制
declare @d as date = '2025-04-22'

IF EXISTS (SELECT * FROM contracts_view where contracts_view.cust_id=123456789 and @d >= contracts_view.date_start and @d  <= contracts_view.date_end 
and contracts_view.shop_id = (SELECT STRING_AGG(shop_id,'-') shop FROM contracts_shops where contracts_shops.contract_id= 1023 GROUP BY contract_id)) 
BEGIN
    print 'Cannot add'
END
else
BEGIN
    print 'added'
END
票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/289984

复制
相关文章
Apple Developer Program注册时所需的内容
探索 无限可能 针对 Apple 平台进行开发意味着您能够轻松获取最新的 macOS、iOS、watchOS 和 tvOS 技术,这将为您带来无限可能,助您为全球各地用户奉上绝妙的 app。这些强大的平台都具有各自独特的功能和用户体验,却又紧密整合在一起,形成一个真正的生态系统。硬件、软件和服务完全协调一致,让您能够打造直观易用且真正无缝的多层面体验。 设计、开发、分发, 开创未来 包罗万象的工具和资源,加上交互式 Swift 编程语言和 Apple 的革命性技术,创新潜力无穷无尽。您可以探索如何开发非凡的 app,随时随地为用户呈上各种资讯、娱乐和服务。 Apple Developer Program 打造新一代 app。 成为会员后,可以获得最新的测试版软件。这样一来,您可以先客户一步,为新版系统开发 app 并进行测试。您还能够在自己的 app 中整合各种高级的 app 功能和服务,并通过 App Store 分发给逾十亿的客户。
iOSDevLog
2018/08/10
2K0
Apple Developer Program注册时所需的内容
Attention 待更新
注意力机制可以描述为一个函数,这个函数将query和一组key-value对映射成一个输出。
MachineLP
2020/03/18
4210
Attention 待更新
疑问总结--待问待资讯--持续更新
customer里的lombok都用的@RequiredArgsConstructor server用的@AllArgsConstructor 看到
名字是乱打的
2021/12/23
4840
vue要点记录(待更新)
Vue实例 每个 Vue 实例都会代理其 data 对象里所有的属性:vm.a===data.a //true 注意只有这些被代理的属性是响应的。 如果在实例创建之后添加新的属性到实例上,它不会触发视
mcq
2018/06/27
1.4K0
同步工具(未完待更新)
在JDK1.7中,同步工具主要包括CountDownLatch(一次性栅栏)、Semaphore(信号量)、CyclicBarrier(循环同步栅栏)、Exchanger(线程间交换器)和Phaser。下面的篇幅中,将依次讲述每种同步工具的概念、用法和原理。
JavaEdge
2022/11/29
4050
移动app漏洞收集(待整理)
http://www.anquan.us/static/bugs/wooyun-2015-0114241.html pageid:
全栈工程师修炼指南
2022/09/28
4240
使用uni-app开发小程序,关于小程序更新后与用户本地不会及时更新解决办法
在小程序更新开发版本之后,用户本地并没有对之前版本的小程序进行删除,那么再进入小程序的时候的版本是不会发生变化的,这是由于发版是异步执行,因此新版本将会覆盖的比较慢,本质是小程序的启动方式分为两种,冷启动与热启动。
wfaceboss
2019/05/08
2.9K0
使用uni-app开发小程序,关于小程序更新后与用户本地不会及时更新解决办法
浅谈Google蜘蛛抓取的工作原理(待更新)
首先,Google 蜘蛛寻找新的页面。然后,Google 对这些页面进行索引,以了解它们的内容,并根据检索到的数据对它们进行排名。爬行和索引是两个不同的过程,但是,它们都由爬行器执行。
海拥
2021/08/23
3.5K0
浅谈Google蜘蛛抓取的工作原理(待更新)
Mutation状态更新
Mutation中的处理方式是将整个commit的对象作为payload使用, 所以代码没有改变, 依然如下:
Qwe7
2022/05/31
6320
nginx 访问/apple-app-site-association
今天我们的ios说他那边需要放一个apple-app-site-association 文件 用来支持他那边的功能,先说一下要求 他要求给他一个线上官网的地址后面跟上他所需要文件的地址 比如 www.baidu.com/apple-app-site-association 文件 首先打开服务器nginx的配置文件
河湾欢儿
2021/01/21
1.9K0
什么是App热更新技术的最优解呢?
热更新是指软件不通过运营商店的软件版本更新审核,直接通过应用自行下载的软件数据更新的行为。
二山山记
2022/09/30
1.6K0
Vue-typescript 打包成app后如何自动更新
项目使用的是vue+ts,使用组件 vue-property-decorator 写法,具体请参考链接说明。
taixingyiji
2022/07/25
9900
Vue-typescript 打包成app后如何自动更新
OSX app 启动后在程序坞不显示
用回mac之后发现各种神奇的问题,比如cocos运行之后在程序坞中找不到,开的窗口多了之后每次想找到他得翻半天(主要是不会各种神奇的快捷键)。
obaby
2023/02/24
5600
Apple Developer支持大陆开发者注册苹果开发者计划
苹果在上月举行的全球开发者大会(WWDC)上宣布启用官方APP,名称“苹果开发者应用”(Apple Developer App),并在昨日的版本更新中苹果放出了针对中国开发者的一项福利。自今天开始,中国大陆地区的开发者可以通过这款APP更加轻松地注册 Apple Developer Program,并在 iPhone 或 iPad 上使用当地付款方式购买会员资格,因此对于没有Visa信用卡的开发中来说,将是一大福利。
xiangzhihong
2022/11/30
6840
苹果 IAP 新特性之启用服务端到服务端通知
服务器到服务器的通知是一项用于自动续订的服务。App Store 会将订阅状态的实时更改发送到您的服务器。PS:有关服务器通知包含的字段信息,请参阅 https://developer.apple.com/documentation/appstoreservernotifications。
HelloWorld杰少
2022/08/04
9190
苹果 IAP 新特性之启用服务端到服务端通知
Uniapp 更新APP
Uniapp打出来的升级包是 .wgt 的文件。将此文件夹上传到服务器上的static上。即:www.example.com/staitc/XXX.wgt
收心
2022/01/19
3650
WWDC22 - In App Purchase 更新总结
WWDC21 是历年来 In App Purchase(IAP,内购内购买)最大的变化,分别推出了 StoreKit 2、App Store Server API、App Store Server Notifications V2 三大特性,去年我们也编写了 《苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!--- WWDC21》 文章,所以我们本文不会再深入提及去年的更新,大家如果不太熟悉,可以先温习一下。本文将对今年 WWDC22 带来的变化,从整体的视角一起回顾。
37手游iOS技术运营团队
2022/07/11
4.9K0
WWDC22 - In App Purchase 更新总结
手把手教你制作Apple Watch App
北京时间2015年3月10日凌晨,Apple Watch正式对外发布,作为苹果公司的最新款产品,Apple Watch官网对两款国产应用进行了推荐,携程旅行App是其中之一。
携程技术
2018/02/23
1.7K0
分区操作后索引的状态
导读:DDL操作是否会导致索引失效的原则上是看是否引起数据发生变化,如果分区的数据发生了改变,则索引需要失效才能保证结果的准确性,如果数据没有发生变化,则索引的状态不会变为UNUSABLE。
数据和云
2020/02/27
8270
赶快更新!Apple 出现多个安全漏洞
The Hacker News 网站披露,苹果公司近日推出了 iOS、iPadOS、macOS 的安全更新,以解决一个 0day 漏洞(追踪为 CVE-2023-23529)。 研究表明,CVE-2023-23529 漏洞与 WebKit 开源浏览器引擎中的类型混淆错误有关,一旦攻击者成功利用,便可在目标系统上执行任意代码。 WebKit 是一个主要用于 Safari,Dashboard,Mail 和其它一些 Mac OS X 程序的开源浏览器引擎,在手机上的应用十分广泛(例如 Android、iPhon
FB客服
2023/02/24
5270
赶快更新!Apple 出现多个安全漏洞

相似问题

如何使连续三周或更长时间的用户有序使用?

316

如何让会话变量的时间更长?

10

如何让通知显示更长时间?

128

如何让会话持续时间更长?

19

Power BI -值连续增加3天或更长时间

1100
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文