SQL Server MERGE + 连接其他表

2023-11-23

我在数据库项目中使用 MERGE 语句从静态值集中填充参考数据,如下所示:

    MERGE INTO dbo.[User] AS TARGET
USING (VALUES
    ('[email protected]', 'My Name'))
AS SOURCE(UserName, FullName)
ON SOURCE.UserName = TARGET.UserName
WHEN NOT MATCHED BY TARGET THEN
    INSERT (UserId, UserName, FullName)
    VALUES (NEWID(), UserName, FullName);

当我想根据其他表中的内容填充辅助表时,问题就出现了。例如,我的 UserPermission 表包含用户 ID 和角色 ID,我希望我的静态值设置为类似 ('[电子邮件受保护]', 'Admin') 并能够加入用户和权限以获取用于 INSERTing 的 ID 值。不知道在哪里做...

Edit:

用户表(ID、用户名) 1、约翰·史密斯 2、马克·沃尔伯格

角色表(ID、角色名称) 1、管理员 2、用户 3、嘉宾

用户角色表(用户ID、角色ID)

我希望 MERGE 语句的 SQL 调整用户角色表,以便我可以指定如下内容:

USING(VALUES
 ('John Smith', 'Administrator'),
 ('Mark Wahlburg', 'User')

它将连接以确定 ID,插入不存在的组合(并且可能删除存在但不在 MERGE 中的组合)。

解决方案:

WITH CTE AS
(
   SELECT UserId, RoleId
   FROM (VALUES
      ('John Smith', 'Administrator'),
      ('Mark Wahlburg', 'User'))
      AS SOURCE(UserName, RoleName)
   INNER JOIN User ON SOURCE.UserName = User.UserName
   INNER JOIN Role ON SOURCE.RoleName = Role.RoleName
)
MERGE INTO UserRole AS TARGET
USING CTE
ON CTE.UserId = TARGET.UserID AND CTE.RoleId = TARGET.UserId
WHEN NOT MATCHED BY TARGET THEN
  INSERT(UserId, RoleId)
  VALUES(UserId, RoleId)

Merge 支持 CTE,因此也许您可以使用它作为源,组合静态数据并在 cte 内执行任何联接。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server MERGE + 连接其他表 的相关文章

  • Linq 选择与另一个表中的 ID 相等的项目

    我不确定这怎么可能 但我有两个表 我想通过表 1 的值从表 2 中获取值 表 1 有一个名为 rank 的外键 它是int 表 2 有一个名为 name 的值 它是string 现在表 1 的 排名 与表 2 的 ID 相关 所以当我说 v
  • LINQ to SQL:从位于不同服务器上的两个数据库获取记录

    我需要从两个不同的表中获取记录 数据库位于两个不同的 SQL Server 中 例如 销售数据库位于服务器 1 上 采购数据库位于服务器 2 上 销售和采购数据库都有一些表集 例如销售数据库中的 table1 和采购数据库中的 table2
  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 删除或更改 ETL 中的记录

    我有一个表 我在上面构建了 ETL 服务 货物记录 到达 离开 进入表格 我已经这样做了 我的桌子将被删除 当项目标识符第二次到达数据库时 两条记录都被删除 label cost time x2 29 14 5 2020 01 00 00
  • C# 查询两个数据库的数据

    我目前有一个查询 我正在从两个不同的数据库获取数据 这些数据被附加到一个名为 accountbuys 的列表中 我的第一个表有三个数据条目 3个想要购买股票的帐户 下一张表有 17 个数据点 购买 17 只股票 I am merging t
  • Sql批量复制截断小数

    当我使用批量复制将十进制值从 C DataTable 插入 Sql Server 2005 时 值会被截断而不是四舍五入 DataTable 中的数据类型为 Decimal 数据库中的数据类型为Decimal 19 3 数据表中的值为 1
  • Lucene.Net 下划线导致令牌分裂

    我已将 MsSqlServer 数据库表 视图和存储过程编写到目录结构中 然后使用 Lucene net 对其进行索引 我的大多数表 视图和过程名称都包含下划线 我使用标准分析器 如果我查询名为 tIr 的表例如 发票 tnWtn01 我收
  • SQL Server中主键和唯一索引的区别[重复]

    这个问题在这里已经有答案了 我的公司目前正在重写我们最近获得的一个应用程序 我们选择使用 ASP net mvc4 来构建这个系统 并使用实体框架作为我们的 ORM 我们收购的公司的前任所有者非常坚定地要求我们使用他们的旧数据库 并且不对其
  • R:行数不相等的列绑定

    我有两个数据集 它们每个都有变量 ID Block 和 RT 反应时间 我想合并 列绑定这两个集合 以便我拥有一个包含变量的数据集 ID 块 RT1 RT2 问题是两个集合中的行数不相等 此外 ID 和块号匹配也很重要 缺失值应替换为 NA
  • 插入后触发更新表列?

    在同一个表中添加任何记录后 我需要更新表中的列 这是我的sql代码 CREATE TRIGGER dbo EmployeeInsert ON dbo APP Employees AFTER INSERT AS BEGIN SET NOCOU
  • 将远程更改合并到非当前分支的分支中

    我有多个分支 我想将远程更改合并到一个分支中不是我当前的分支 例如 git merge remote branch some other branch 仅当本地分支可以快速转发到远程头时 这才是可行的 在任何分支中 要从源获取远程分支并更新
  • 如何在Git中手动合并所有文件?

    我想合并所有文件manually有了 meld 或任何其他 diff 工具 我如何使用 Git 来做到这一点 当我跑步时git mergetool它说no files need merging 所以我想只有当我有冲突时我才能做到这一点 有更
  • 清除表中的所有行将身份规范重置为零并且不影响外键?

    我们已经创建了数据库框架以及所有关系和依赖关系 但表内部只是虚拟数据 我们需要删除这些虚拟数据 并开始添加正确的数据 我们怎样才能清除所有内容并将主键 IsIdentity 是 保留为零 并且不影响外部表关系结构 多谢 您可以采取以下步骤
  • 在SQL Server中仅获取浮点数的小数部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 SQL Server 2008
  • 仅当变量不为空时 SQL 添加过滤器

    您好 我有疑问如下 SELECT route id ROUTE ID FROM route master NOLOCK WHERE route ou 2 AND route query l s query AND lang id 1 这里
  • 是否可以自动化 SQL Server 2008 分析器?

    有一个post https stackoverflow com questions 488020 what is your most useful sql trick to avoid writing more code关于有用的 SQL
  • 在单个更新语句上使用事务

    我在工作中为一些 SP 配音 我发现编写代码的人在单个更新语句上使用了事务 如下所示 begin transaction single update statment update table whatever with whatever
  • 时间分组的 TSQL 滚动平均值

    这是以下内容的后续内容 TSQL 按 N 秒分组 https stackoverflow com questions 5513176 tsql group by n seconds 我得到了我想要的东西 但没有要求正确的东西 如何获得 1
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • 如何在 SQL Server 中什么都不做[重复]

    这个问题在这里已经有答案了 可能的重复 T SQL 中的空语句 https stackoverflow com questions 3234871 empty statement in t sql 我怎样才能让它在 SQL Server 中

随机推荐

  • Android 材料设计

    新的Android Material Design是否支持旧版本的Android 例如3 0或2 1 如果支持的话会是什么样子 作为真正的材料设计还是只是旧设计 我即将使用材料设计主题更新我的应用程序 那么有人已经这样做了吗 就材料设计这一
  • 为什么 mac chrome 上的选择框不响应点击事件? [复制]

    这个问题在这里已经有答案了 可能的重复 JQuery 函数不适用于 Mac 上的 Chrome 但适用于 Win 7 上的 Chrome 和所有其他浏览器 我有一个选择选项列表 div class social option div
  • 带标题的 window.open

    我可以控制发送的 HTTP 标头吗window open 跨浏览器 如果没有 我可以以某种方式window open然后在弹出窗口中使用自定义标头发出我的请求的页面 我需要一些狡猾的技巧 我可以控制window open 跨浏览器 发送的H
  • 在 Android Marshmallow 中请求多个蓝牙权限

    我正在开发一个具有连接功能的应用程序 该应用程序连接到使用 SDK 23 进行编译的蓝牙设备 我在请求蓝牙的多个权限时遇到问题 这是我到目前为止所做的 Override public void onStart super onStart i
  • 这里如何去掉trace0呢?

    信息 trace0 始终显示在蓝线的悬停文本框旁边 如何删除它 为什么不在橙线上 Trace0到底是什么意思 library plotly fig lt plot ly fig lt fig gt add trace type scatte
  • C#更改框架错误

    我正在运行 Visual Studio 2010 我只是将项目的框架从 4 0 更改为 3 5 我删除了它要求我删除的引用 Microsoft Framework 然后尝试编译 我现在收到错误 错误 1 无法加载文件或 装配 系统 绘图 版
  • 海湾合作委员会优化?漏洞?及其对项目的实际意义

    我的问题分为三个部分 问题1考虑下面的代码 include
  • 从路径字符串中获取类似树的结构

    我已经被困了两天了 因为我对指针和递归不太坚定 我有一系列类似路径的结构 可以说 s string a b c a b g a d 具有这样的数据结构 type Node struct Name string json name Child
  • 如何在RecyclerView中选择和取消选择项目?如何仅在回收者视图中突出显示所选项目?

    Override public void onBindViewHolder final mainscreenspecializationadap MyViewHolder holder final int positionz this po
  • 如何访问ThreadPoolExecutor内部正在运行的线程?

    我有一个正在运行的线程队列 并且希望在执行时公开其一些数据 以监视进程 ThreadPoolExecutor提供对其队列的访问 我可以迭代这些对象来调用我的重写toString 方法 但这些只是等待执行的线程 有没有办法访问当前正在运行的线
  • CSS Translate:translate() 属性最终的用途是什么?

    在 CSS3 中 动画是在各种供应商前缀下引入的 并带有过渡属性 现在 至少在纯 CSS 中 有两种方法可以使元素改变位置 将元素的位置设置为绝对位置并进行调整left right top and bottom Using vendor t
  • 当主线程繁忙时如何让Qt工作?

    我的程序的主线程 函数 main 在那里 是为非 GUI 任务保留的 它调用了许多冗长的计算函数 所有实现的 GUI 都在单独的线程中完成其工作 我现在将使用 Qt 实现另一个 GUI Qt 文档说所有与 GUI 相关的任务都应该在主线程中
  • 如何在本地下载pip依赖项? [复制]

    这个问题在这里已经有答案了 我正在运行我的 python 应用程序requirements txt包含各种依赖项的文件 我正在 Pivotal Cloud Foundry 环境中部署此应用程序 然而 我在其中部署的环境是气隙的 因此我似乎无
  • Django URLS,使用 ?在网址中

    我正在尝试进行一些 Django URL 匹配 我想要一些我有的网址http mysite com base sort type1 http mysite com base sort type2 etc 我不知道如何 URL 匹配这些表达式
  • 配置来自 Nifi 的 HTTP POST 请求

    我正在尝试从 REST 客户端访问 WCF 服务 我正在从 REST 客户端向 WCF 服务发送 POST 请求 详细如下 供大家参考 The 服务合同定义如下 ServiceContract public interface IBZTso
  • UWP 中的自定义内容对话框包含 3 个以上按钮

    我想显示一个内容对话框 其中包含比传统的主要和次要结果更多的内容 由于我无法重写 ContentDialogResult 枚举并向该属性添加选项 因此我似乎唯一的选择可能是创建自己的自定义控件 其工作方式与 ContentDialog 类似
  • AppDelegate for Cocoa 应用程序在 Xcode 6 中使用 Storyboards

    我有一个现有的 OS X 应用程序 在转换为 Storyboards 作为主界面后 我的应用程序委托不再被使用 之前 MainMenu xib 有一个 App Delegate 对象 我可以将其类设置为我的应用程序委托 然而 故事板不包含这
  • Chrome Service Worker iOS 支持

    随着 Apple 几个月前宣布 Service Worker 支持 iOS 11 3 我最近开始尝试让 Service Worker 在 iOS 上工作 在 Safari 上 它按预期工作 访问网站后 它可以离线工作 然而 当我尝试在 Ch
  • “6k 浏览次数”是什么意思以及如何在 PHP 中格式化该数字

    6k 浏览次数 是什么意思以及如何在 PHP 中格式化这个数字 k是缩写基洛前缀并表示千 所以6k就是六千 您可以使用以下除法函数来格式化数字 function format number prefixes kMGTPEZY if numb
  • SQL Server MERGE + 连接其他表

    我在数据库项目中使用 MERGE 语句从静态值集中填充参考数据 如下所示 MERGE INTO dbo User AS TARGET USING VALUES email protected My Name AS SOURCE UserNa