在 SQL 中进行复制时,我可以将旧密钥链接到新密钥吗?

2023-12-10

我正在尝试复制表中的记录并使用 SQL Server 2005 中的存储过程更改一些值。这很简单,但我还需要使用新的主键复制其他表中的关系。由于此过程用于批量复制记录,我发现很难存储旧密钥和新密钥之间的某些关系。 现在,我正在使用 OUTPUT INTO 从批量插入中获取新密钥。 前任:

INSERT INTO table
 (column1, column2,...)
 OUTPUT INSERTED.PrimaryKey INTO @TableVariable
 SELECT column1, column2,...

有没有这样的方法可以轻松地在插入新钥匙的同时插入旧钥匙(以确保我已配对正确的相应钥匙)?

我知道光标是一种选择,但我从未使用过它们,只听到以恐怖故事的方式引用它们。我更喜欢使用 OUTPUT INTO 或类似的东西。


如果您需要跟踪临时表中的旧键和新键,则需要作弊并使用MERGE:

数据设置:

create table T (
    ID int IDENTITY(5,7) not null,
    Col1 varchar(10) not null
);
go
insert into T (Col1) values ('abc'),('def');

以及你的替代品INSERT陈述:

declare @TV table (
    Old_ID int not null,
    New_ID int not null
);
merge into T t1
using (select ID,Col1 from T) t2
on 1 = 0
when not matched then insert (Col1) values (t2.Col1)
output t2.ID,inserted.ID into @TV;

并且(实际上需要在同一批次中,以便您可以访问表变量):

select * from T;
select * from @TV;

生产:

ID  Col1
5   abc
12  def
19  abc
26  def

Old_ID  New_ID
5       19
12      26

您必须这样做的原因是因为对OUTPUT clause当与INSERT- 您只能访问inserted表,而不是可能属于某个表的任何表SELECT.


相关 - 更多解释MERGE abuse

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

在 SQL 中进行复制时,我可以将旧密钥链接到新密钥吗? 的相关文章

随机推荐

  • 在 python pandas 中合并数据帧而不重复行[重复]

    这个问题在这里已经有答案了 我想使用相似的列 A 组合两个数据框 gt gt gt df1 A B 0 I 1 1 I 2 2 II 3 gt gt gt df2 A C 0 I 4 1 II 5 2 III 6 为此 我尝试使用 合并 p
  • 查找并替换数组中的重复项,但用不同的字符串替换每个第 n 个实例

    我下面有一个由重复字符串组成的数组 我想查找并替换这些字符串 但每次匹配时我想更改替换字符串的值 让我演示一下 该示例数组 SampleArray champ king king mak mak mak 应该改为 SampleArray c
  • Google 登录可在开发版本中工作,但不能在预览版本中工作

    我正在构建一个带有 expo 和 React Native 的应用程序 我通过 firebase 使用 Google 登录 当我运行 iOS 开发版本时 登录功能完美运行 但是 当我运行 iOS 预览版本时 出现以下错误 访问被阻止 此应用
  • 已通过身份验证,但 user.is_authenticated 仍为 false

    使用 GAE Django nonrel 创建简单的应用程序 我不认为问题特定于 GAE 或 nonrel 分支 最有可能是 PEBKAC 作为 python django noob 并且会在基本 django 安装时发生 我正在使用 dj
  • 无法使用 Python SqlAlchemy 将数据写入 Vertica 数据库 - 类型“TEXT”不存在

    我正在尝试将 pandas 数据框上传到 Vertica 数据库 能够使用 sqlalchemy 设置引擎和查询数据库 但是 当我尝试从 pandas dataframe 上传数据时 会收到错误消息 因为类型 TEXT 不存在 我使用的是
  • TAPI 的替代技术?

    是否有支持第三方呼叫控制 3pcc 的 TAPI 替代技术 我想在应用程序中提供以下 3pcc 功能 拨出电话 用户单击应用程序中的按钮 用户的电话摘机 被叫电话振铃 被叫者的电话显示被叫者的电话号码 而不是用于应用程序的电话号码 当被叫者
  • 无法使用 Selenium Webdriver 打开 Chrome 浏览器。管理员禁止加载解压的扩展

    我正在使用 Selenium Webdriver C Visual Studio 和 Chrome 浏览器自动化我的应用程序 当 selenium 尝试打开 chrome 浏览器时 我出现在弹出窗口下方 Failed to load ext
  • 附上Java源代码

    我一生都无法将 java 源代码附加到 eclipse 中 这样我就可以看到该语言的内部工作原理 甚至不是像 String 类这样简单的东西 当我运行 java version 时 这就是我所拥有的 java version 1 6 0 1
  • 视口原点动画

    我正在开发一个 Windows Phone 应用程序 其中有一个视口控制器 使我能够放大和缩小内容 我想将缩放居中于缩放点 我可以做什么 Viewportcontroller SetViewportOrigin 但这使得viewportco
  • 如何将数据框(R)导出到Oracle表中

    我需要一个如何将数据从 R 传输到 Oracle 表的建议 我有一个 R 数据框 我想将其传输到特定的 Oracle 表 整个数据框或某些列 作为一个选项 通过 R 将放置在 csv 文件中的数据帧传输到 Oracle 中 我已经在整个 i
  • 有没有办法在没有 JQuery UI 的情况下使用自动完成功能

    有没有办法在没有 JQuery UI 的情况下使用自动完成功能 因为 JQuery UI 的占用空间太大 包括其 CSS 或者是否有任何替代插件或其他东西 我用谷歌搜索了很多 但没有找到任何 您可以构建自己的不依赖于 JQuery UI 它
  • 在Powershell中使用升级后的FolderBrowserDialog(“Vista风格”)

    我在用着电源外壳使用户能够浏览 Node js 应用程序的文件 文件夹路径 因为到目前为止我还没有找到更好的轻量级替代方案 并且我遇到了处理可怕的 可怜的问题的老问题可用性FolderBrowserDialog不支持 粘贴路径 访问快速访问
  • 在发布模式下构建解决方案时,“LinkAssemblies”任务意外失败

    我的项目正在成功构建Debug模式 但是当我将其更改为Release模式 出现以下异常 Severity Code Description Project File Line Suppression State Error The Link
  • 停止执行 Groovy 脚本

    我正在我的代码中嵌入 Groovy 运行时 并且我希望能够中断它 我无法控制将要运行的脚本 我读到有关 groovy transform ThreadInterrupt 来处理线程中断的信息 但由于某种原因 下面的代码无法按预期工作 它实际
  • String.intern() 的垃圾收集行为

    如果我使用 String intern 来提高性能 因为我可以使用 来比较实习字符串 我会遇到垃圾收集问题吗 内部字符串的垃圾收集机制与普通字符串有何不同 String intern 管理一个内部的 本机实现的池 它具有一些与 GC 相关的
  • 如何水平居中DIV

    如何将 DIV 与此 URL 上的文本框和按钮水平居中 http tinyurl com d4lpyh5 问候 凯文 在第 10 行 您应该为 div 添加宽度 改变 div style margin left auto margin ri
  • dojo dgrid 中不区分大小写的排序

    是否可以不区分大小写进行排序 例如 默认情况下排序显示如下 Awesomeman adam beyonce 但是 我想排序 adam Awesomeman beyonce 是否可以轻松地覆盖灵敏度 据我所知 网格继承自OnDemandGri
  • std::mersenne_twister_engine 和随机数生成

    如果我执行以下操作 会生成什么分布 均匀分布 泊松分布 正态分布等 输出似乎表明均匀分布 但是 为什么我们需要std uniform int distribution int main std mt19937 64 generator 13
  • org.json.JSONException:在 android 的字符 0 处输入结束

    我正在实现一个 Android 应用程序并尝试制作注册和登录屏幕 我的应用程序已连接到服务器 这是我的代码出错的部分 public void onResponse String response Log d TAG Register Res
  • 在 SQL 中进行复制时,我可以将旧密钥链接到新密钥吗?

    我正在尝试复制表中的记录并使用 SQL Server 2005 中的存储过程更改一些值 这很简单 但我还需要使用新的主键复制其他表中的关系 由于此过程用于批量复制记录 我发现很难存储旧密钥和新密钥之间的某些关系 现在 我正在使用 OUTPU