sql 联合更新、关联更新

sql 要将两个或者多个表的数据联系关系,然后,点窜别的一个表数据时,需要用到如下布局:

UPDATE ...

SET ...

FROM xxx, xxxx

WHERE  ...

方式/步调

  1. 1

    【若是存在测试姑且表,则先删除,便于反复执行SQL】:

    IF OBJECT_ID('tempdb..#SourceTable1') IS NOT NULL DROP TABLE #SourceTable1;

    IF OBJECT_ID('tempdb..#SourceTable2') IS NOT NULL DROP TABLE #SourceTable2;

    IF OBJECT_ID('tempdb..#UpdateTable') IS NOT NULL DROP TABLE #UpdateTable;

  2. 2

    【建立源表1】:

    CREATE TABLE #SourceTable1(

    Id UNIQUEIDENTIFIER,

    SCode VARCHAR(50),

    SName NVARCHAR(100),

    Remark NVARCHAR(500)

    )

  3. 3

    【建立源表2】:

    CREATE TABLE #SourceTable2(

    Id UNIQUEIDENTIFIER,

    SCode VARCHAR(50),

    SAttr1 VARCHAR(100),

    SAttr2 VARCHAR(100)

    )

  4. 4

    【建立需要更新数据的表】:

    CREATE TABLE #UpdateTable(

    Id UNIQUEIDENTIFIER,

    SCode VARCHAR(50),

    SName NVARCHAR(100),

    SAttr1 VARCHAR(100),

    SAttr2 VARCHAR(100)

    )

  5. 5

    【插入源表1测试数据】:

    INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode1', '更新名字1', '更新测试备注1');

    INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode2', '更新名字2', '更新测试备注2');

    INSERT INTO #SourceTable1(Id, SCode, SName, Remark) VALUES(NEWID(), 'SCode3', '更新名字3', '更新测试备注3');

       -- 查询插入的成果

       SELECT * FROM #SourceTable1

  6. 6

    【插入源表2测试数据】:

    INSERT INTO #SourceTable2(Id, SCode, SAttr1, SAttr2) VALUES(NEWID(), 'SCode1', 'SCode1-更新属性1', 'SCode1-更新属性2');

    INSERT INTO #SourceTable2(Id, SCode, SAttr1, SAttr2) VALUES(NEWID(), 'SCode2', 'SCode2-更新属性1', 'SCode2-更新属性2');

       -- 查询插入的成果

       SELECT * FROM #SourceTable2

  7. 7

    【插入#UpdateTable的原始记实】:

    INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode1', '名字1', 'SCode1-属性1', 'SCode1-属性1');

    INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode2', '名字2', 'SCode2-属性2', 'SCode2-属性2');

    INSERT INTO #UpdateTable(Id, SCode, SName, SAttr1, SAttr2) VALUES(NEWID(), 'SCode3', '名字3', 'SCode3-属性3', 'SCode3-属性3');

       -- 查询插入的成果

       SELECT * FROM #UpdateTable

  8. 8

    【利用结合查询,将#UpdateTable、源表1、2中不异SCode的行字段更新到表#UpdateTable】:

    UPDATE ut

    SET ut.SName = sc1.SName,

        ut.SAttr1 = sc2.SAttr1,

    ut.SAttr2 = sc2.SAttr2

    FROM #UpdateTable ut, #SourceTable1 sc1, #SourceTable2 sc2

    WHERE ut.SCode = sc1.SCode

    AND ut.SCode = sc2.SCode

       -- 查询插入的成果

       SELECT * FROM #UpdateTable

  • 发表于 2018-10-20 00:00
  • 阅读 ( 723 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具