找回密码
 立即注册

QQ登录

只需一步,快速开始

老秋
金牌服务用户   /  发表于:2022-4-7 17:16  /   查看:1809  /  回复:7
1金币
本帖最后由 Chelsey.Wang 于 2022-4-8 09:26 编辑

想通过执行SQL命令方式增加主子表,不知如何操作,主要问题是在增加子表时,怎么能得到主表的ID

最佳答案

查看完整内容

在用的sqlserver实例。既然都问到sql咋写了,想必下面简单的语句应该没啥问题。中英混搭看着有点丑,但很实用。页面也不用做任何条件判断,只要提交没有就新增,有就更新。下面只贴了一个子表的例子,实则一拖二

7 个回复

倒序浏览
最佳答案
最佳答案
咖啡里讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-4-7 17:16:54
来自 5#
本帖最后由 咖啡里 于 2022-4-8 00:23 编辑

在用的sqlserver实例。既然都问到sql咋写了,想必下面简单的语句应该没啥问题。中英混搭看着有点丑,但很实用。页面也不用做任何条件判断,只要提交没有就新增,有就更新。下面只贴了一个子表的例子,实则一拖二
  1. BEGIN
  2.     /*公司信息*/
  3.     DECLARE @公司guid NVARCHAR(32)
  4.     /*guid为空时生成新的guid*/
  5.     IF (@gu_id IS NULL)
  6.         BEGIN
  7.             SET @公司guid = REPLACE(NEWID(), '-', '')
  8.         END
  9.     else
  10.         (@gu_id IS NOT NULL)
  11.     BEGIN

  12.         SET @公司guid = @gu_id
  13.     END
  14.     /*更新主表数据*/
  15.     UPDATE dic_company_info
  16.     SET abbreviation=@公司简称,
  17.         cn_name=@中文名称,
  18.         en_name=@英文名称,
  19.         cn_add=@公司地址,
  20.         fax=@传真,
  21.         email=@电子邮箱,
  22.         tel=@电话,
  23.         FGC_LastModifier=@编辑人,
  24.         FGC_LastModifyDate=GETDATE()
  25.     WHERE gu_id = @gu_id
  26. /*公司信息插入;当guid为空时插入一条主表新数据*/
  27.     IF (@gu_id IS NULL)
  28.         BEGIN
  29.             INSERT INTO dic_company_info
  30.             (gu_id,
  31.              company_code,
  32.              abbreviation,
  33.              cn_name,
  34.              en_name,
  35.              cn_add,
  36.              fax,
  37.              email,
  38.              tel,
  39.              FGC_Creator,
  40.              FGC_CreateDate,
  41.              FGC_LastModifier,
  42.              FGC_LastModifyDate,
  43.              FGC_UpdateHelp)
  44.             VALUES (@公司guid,
  45.                     @公司编码,
  46.                     @公司简称,
  47.                     @中文名称,
  48.                     @英文名称,
  49.                     @公司地址,
  50.                     @传真,
  51.                     @电子邮箱,
  52.                     @电话,
  53.                     @编辑人,
  54.                     GETDATE(),
  55.                     @编辑人,
  56.                     GETDATE(),
  57.                     LOWER(NEWID()))
  58.         END
  59. /*公司银行信息;解析JSON生成一个bank的临时表便于后面使用*/
  60.     select *
  61.     into #bank
  62.     FROM OPENJSON(@bankjson)
  63.                   WITH
  64.                       ( ggu_id NVARCHAR(32) '$.gu_id',
  65.                       开户行 NVARCHAR(50) '$.opening_bank',
  66.                       账号 NVARCHAR(50) '$.account',
  67.                       备注 NVARCHAR(200) '$.remark'
  68.                       )
  69. /*删除已删除的数据*/
  70.     DELETE
  71.     FROM dic_company_bank_info
  72.     WHERE NOT EXISTS(SELECT 1 FROM #bank WHERE gu_id = ggu_id)
  73.       AND company_gu_id = @公司guid
  74. /*更新修改的数据*/
  75.     UPDATE dic_company_bank_info
  76.     SET opening_bank=开户行,
  77.         account=账号,
  78.         remark=备注,
  79.         FGC_LastModifier=@编辑人,
  80.         FGC_LastModifyDate=GETDATE()
  81.     FROM #bank
  82.     WHERE gu_id = ggu_id;
  83. /*插入guid为空的数据*/
  84.     INSERT INTO dic_company_bank_info
  85.     (gu_id,
  86.      company_gu_id,
  87.      opening_bank,
  88.      account,
  89.      remark,
  90.      FGC_Creator,
  91.      FGC_CreateDate,
  92.      FGC_LastModifier,
  93.      FGC_LastModifyDate,
  94.      FGC_UpdateHelp)
  95.     SELECT REPLACE(NEWID(), '-', ''),
  96.            @公司guid,
  97.            开户行,
  98.            账号,
  99.            备注,
  100.            @编辑人,
  101.            GETDATE(),
  102.            @编辑人,
  103.            GETDATE(),
  104.            LOWER(NEWID())
  105.     FROM #bank
  106.     WHERE ggu_id IS NULL
  107. end
复制代码


评分

参与人数 1金币 +1000 收起 理由
Chelsey.Wang + 1000 赞一个!

查看全部评分

回复 使用道具 举报
Chelsey.Wang讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-4-7 17:46:10
2#
您好,这个得看一下您具体的情况是怎样的,不同的场景解决方案也不同,想要了解一下您的实际场景是怎样的,为什么需要通过SQL命令新增主子表记录呢?
回复 使用道具 举报
老秋
金牌服务用户   /  发表于:2022-4-7 18:39:03
3#
因为涉及从其他表select出来数据再插入到主子表中,这个主子表是使用主表ID键进行关联的;使用服务端名称循环添加表格发现速度太慢,所以需要使用“执行SQL命令”,希望能给个样例demo,谢谢
回复 使用道具 举报
app转转风悬赏达人认证 活字格认证
中级会员   /  发表于:2022-4-7 21:17:20
4#
老秋 发表于 2022-4-7 18:39
因为涉及从其他表select出来数据再插入到主子表中,这个主子表是使用主表ID键进行关联的;使用服务端名称循 ...

主子表的操作,都是先添加主表数据,然后查询出主表ID,再传递给子表中的主ID。

可以分步执行sql命令,第一步操作主表,第二步查询出主表ID,第三步操作子表。
回复 使用道具 举报
咖啡里讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-4-8 00:21:03
6#
本帖最后由 咖啡里 于 2022-4-8 00:23 编辑

咋就多一个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
老秋
金牌服务用户   /  发表于:2022-4-8 09:03:46
7#
感谢,感谢,大神的帖子很有学习价值!
回复 使用道具 举报
Chelsey.Wang讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2022-4-8 09:25:44
8#
咖啡里 发表于 2022-4-7 17:16
在用的sqlserver实例。既然都问到sql咋写了,想必下面简单的语句应该没啥问题。中英混搭看着有点丑,但很实 ...

感谢大佬支持
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部