本帖最后由 咖啡里 于 2022-4-8 00:23 编辑
在用的sqlserver实例。既然都问到sql咋写了,想必下面简单的语句应该没啥问题。中英混搭看着有点丑,但很实用。页面也不用做任何条件判断,只要提交没有就新增,有就更新。下面只贴了一个子表的例子,实则一拖二
- BEGIN
- /*公司信息*/
- DECLARE @公司guid NVARCHAR(32)
- /*guid为空时生成新的guid*/
- IF (@gu_id IS NULL)
- BEGIN
- SET @公司guid = REPLACE(NEWID(), '-', '')
- END
- else
- (@gu_id IS NOT NULL)
- BEGIN
- SET @公司guid = @gu_id
- END
- /*更新主表数据*/
- UPDATE dic_company_info
- SET abbreviation=@公司简称,
- cn_name=@中文名称,
- en_name=@英文名称,
- cn_add=@公司地址,
- fax=@传真,
- email=@电子邮箱,
- tel=@电话,
- FGC_LastModifier=@编辑人,
- FGC_LastModifyDate=GETDATE()
- WHERE gu_id = @gu_id
- /*公司信息插入;当guid为空时插入一条主表新数据*/
- IF (@gu_id IS NULL)
- BEGIN
- INSERT INTO dic_company_info
- (gu_id,
- company_code,
- abbreviation,
- cn_name,
- en_name,
- cn_add,
- fax,
- email,
- tel,
- FGC_Creator,
- FGC_CreateDate,
- FGC_LastModifier,
- FGC_LastModifyDate,
- FGC_UpdateHelp)
- VALUES (@公司guid,
- @公司编码,
- @公司简称,
- @中文名称,
- @英文名称,
- @公司地址,
- @传真,
- @电子邮箱,
- @电话,
- @编辑人,
- GETDATE(),
- @编辑人,
- GETDATE(),
- LOWER(NEWID()))
- END
- /*公司银行信息;解析JSON生成一个bank的临时表便于后面使用*/
- select *
- into #bank
- FROM OPENJSON(@bankjson)
- WITH
- ( ggu_id NVARCHAR(32) '$.gu_id',
- 开户行 NVARCHAR(50) '$.opening_bank',
- 账号 NVARCHAR(50) '$.account',
- 备注 NVARCHAR(200) '$.remark'
- )
- /*删除已删除的数据*/
- DELETE
- FROM dic_company_bank_info
- WHERE NOT EXISTS(SELECT 1 FROM #bank WHERE gu_id = ggu_id)
- AND company_gu_id = @公司guid
- /*更新修改的数据*/
- UPDATE dic_company_bank_info
- SET opening_bank=开户行,
- account=账号,
- remark=备注,
- FGC_LastModifier=@编辑人,
- FGC_LastModifyDate=GETDATE()
- FROM #bank
- WHERE gu_id = ggu_id;
- /*插入guid为空的数据*/
- INSERT INTO dic_company_bank_info
- (gu_id,
- company_gu_id,
- opening_bank,
- account,
- remark,
- FGC_Creator,
- FGC_CreateDate,
- FGC_LastModifier,
- FGC_LastModifyDate,
- FGC_UpdateHelp)
- SELECT REPLACE(NEWID(), '-', ''),
- @公司guid,
- 开户行,
- 账号,
- 备注,
- @编辑人,
- GETDATE(),
- @编辑人,
- GETDATE(),
- LOWER(NEWID())
- FROM #bank
- WHERE ggu_id IS NULL
- end
复制代码
|