Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查合同是否与另一个合同查询相冲突

检查合同是否与另一个合同查询相冲突
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

复制
相关文章
httpclient post发送json数组并解决json乱码问题
业务: 客户端发送json数据,服务端进行解析 client发送json格式: {"data":[{"name":"1;,a","id_no":"222,a","cellphone":"123141a","abode_detail":"213,a","emp_add":"werew3a","app_no":"111111111111a","create_time":"11a"},{"name":"张三","id_no":"null","cellphone":"null","abode_detai
shengjk1
2018/10/24
4.3K0
HttpClient 发送get请求并返回Json数据
一、以百度百科接口为例 http://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&
week
2018/08/24
3.3K0
HttpClient 发送get请求并返回Json数据
mysql中保存并操作json对象
"At the end of the day, we can endure much more than we think we can.—— Frida Kahlo"
小闫同学啊
2020/03/25
14.4K0
json转对象时一直报错
问题:json格式的请求体经controller控制器会自动转换成对象格式。可是的json请求的key和对应的类的字段是一模一样的,发送请求总是显示400错误,估计是请求体错误。可是并没有发现错误啊,请求的字段都是复制的,百思不得其解,只能逐个定位,一步一步的找错。
全栈程序员站长
2022/08/05
5640
json数据发送时浏览器提示“保存”解决
数据以json形式发送的时候,部分浏览器不能直接解析,而是提示是否保存,nodejs的express应用中可以通过如下代码解决该问题: router.get('/', function (req, res, next) { ... res.type("html"); ... }); 这样浏览器就不会再提示保存了。。。
用户1141560
2017/12/26
1.3K0
python中将字符串转为json对象并
string =" {   "status": "error",   "messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],   "code": 404
py3study
2020/01/09
1.3K0
HttpClient 发送Json
import com.fasterxml.jackson.databind.ObjectMapper; import msxf.model.People; import msxf.until.ImpalaJdbc; import msxf.until.NowDate; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.http.HttpS
shengjk1
2018/10/24
2.3K0
java json数组转json对象_json对象数组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
10.5K0
java json数组转json对象_json对象数组
Springboot实战:发送邮件/重置密码业务
忘记密码并通过邮件重置密码是一个常见的业务需求,在开发我的个人小项目过程中,也需要用到这个业务,今天就给大家带来一个业务实战。
Rude3Knife的公众号
2019/08/07
1.6K0
python中将字符串转为json对象并取值
"messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],
用户7886150
2021/01/16
2.3K0
[Springboot]发送邮件、重置密码业务实战
忘记密码并通过邮件重置密码是一个常见的业务需求,在开发我的个人小项目过程中,也需要用到这个业务,今天就给大家带来一个业务实战。
蛮三刀酱
2019/03/26
7890
postman 发送json请求
Tags: 工具 Archives QR Code
简单、
2018/07/17
1.5K0
json对象转map对象_json map
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172454.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/23
2.7K0
JSON对象
目录 JSON JSON语法 JSON静态函数 访问JSON对象 JSON JSON是一种数据交换格式 JSON语法 数据都是有名称/值对组成 名称和值对是由冒号分隔 JSON静态函数 parse 将JSON格式的字符串转换为JSON对象 var str = '{"hvge":1,"hv":2}' console.log(JSON.parse(str)) stringify 将JSON对象转化为字符串 var oJson = { "hvge": 1, "hv":
星辉
2019/01/15
1.4K0
JSON 对象
key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。
陈不成i
2021/07/13
1.2K0
前端json字符串转json对象_list对象转json
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
4.4K0
.net c# json转对象 对象转json
.net和java中操作json不像php那么轻巧方便,之前我使用.net json转对象,需要创建一个json实体类,繁琐至极。
高久峰
2023/07/02
5530
Java技术点-json转对象,对象转json
Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。
用户9006224
2022/12/21
3.3K0
jackson简单使用,对象转json,json转对象,json转list
添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.8.2' // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
Ryan-Miao
2018/03/13
8K0
点击加载更多

相似问题

当试图发送Json对象时,应用程序崩溃

11

如何在ESP8266 MicroPython崩溃后重置main.py?

44

Esp8266无限重置

10

发送空格和点时Json崩溃

10

发送json对象后应用程序崩溃

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档