如何在 SQL Server 中同时将数据插入到两个表中?

2023-12-02

假设我的表结构如下所示:

CREATE TABLE [dbo].[table1] (
    [id] [int] IDENTITY(1,1) NOT NULL,
    [data] [varchar](255) NOT NULL,
    CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED ([id] ASC)
)

CREATE TABLE [dbo].[table2] (
    [id] [int] IDENTITY(1,1) NOT NULL,
    [table1_id] [int] NOT NULL,
    [data] [varchar](255) NOT NULL,
    CONSTRAINT [PK_table2] PRIMARY KEY CLUSTERED ([id] ASC)
)

The [id]第一个表的字段对应于[table1_id]第二个领域。我想做的是在单个事务中将数据插入到两个表中。现在我已经知道如何通过执行 INSERT-SELECT-INSERT 来做到这一点,如下所示:

BEGIN TRANSACTION;
DECLARE @id [int];
INSERT INTO [table1] ([data]) VALUES ('row 1');
SELECT @id = SCOPE_IDENTITY();
INSERT INTO [table2] ([table1_id], [data]) VALUES (@id, 'more of row 1');
COMMIT TRANSACTION;

对于像您只插入几行的小情况来说,这一切都很好。但我需要做的是一次插入几十万行,甚至可能一百万行。数据来自另一个表,所以如果我只将其插入到一个表中,那就很简单,我只需这样做:

INSERT INTO [table] ([data])
SELECT [data] FROM [external_table];

但我该如何做到这一点并将数据分成[table1] and [table2],并且还在更新[table2]与适当的[table1_id]当我这样做的时候?这可能吗?


尝试这个:

insert into [table] ([data])
output inserted.id, inserted.data into table2
select [data] from [external_table]

UPDATE: Re:

Denis - 这看起来非常接近我想要做的事情,但也许你可以为我修复以下 SQL 语句?基本上,[table1] 中的 [data] 和 [table2] 中的 [data] 代表 [external_table] 中的两个不同/不同的列。仅当您希望 [data] 列相同时,您上面发布的语句才有效。

INSERT INTO [table1] ([data]) 
OUTPUT [inserted].[id], [external_table].[col2] 
INTO [table2] SELECT [col1] 
FROM [external_table] 

不可能输出外部列insert声明,所以我认为你可以做这样的事情

merge into [table1] as t
using [external_table] as s
on 1=0 --modify this predicate as necessary
when not matched then insert (data)
values (s.[col1])
output inserted.id, s.[col2] into [table2]
;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 SQL Server 中同时将数据插入到两个表中? 的相关文章

随机推荐

  • 在 UIWebView 中添加 UIButton

    我有一个 UIWebView 已经由我的请求 loadRequest 填充 我想在其中添加一个 UIButton 编写这个简单的代码很容易 self myWebView loadRequest request self myWebView
  • PyUSB dev.set_configuration()

    我正在尝试使用 python 库 PyUSB 将数据发送到 USB 记忆棒 我正在使用的代码如下 import usb core import usb util find our devices dev usb core find idVe
  • 单击文件链接时如何防止 Edge 中出现空白选项卡

    我有一个 html 页面 其中包含多个指向各种文件类型 例如 pdf csv 和 zip 的文件的链接 根据可用的浏览器插件 其中一些文件可以由浏览器内联打开 而其他文件将被下载 我不希望在当前选项卡中打开此类链接 因此每个链接都有该属性t
  • 在结账页面更新 woocommerce 订单,而不是创建新订单

    我正在创建一个 Wordpress 和 WooCommerce 插件 它执行以下操作 匿名用户在页面定制产品 在该过程中的 php 脚本中 它在数据库中创建订单 用户进入结账页面 要求提供客户数据 送货等 通过单击 立即购买 WooComm
  • 语音识别可用的语言

    据我所知 语音识别可用于 3 种语言 英语 英国 美国 澳大利亚 日语和中文 普通话 有谁知道有关如何在这些语言之间切换的更多详细信息 有没有办法 以编程方式 知道在特定设备上哪种语言可用于语音识别 也许在日本唯一有日语 但我可以以某种方式
  • Win 7 64位上的Mono开发环境 gmcs hello.cs -pkg:gtk-sharp-2.0 找不到文件

    我下载了 Mono 并将其安装在 Win 7 64bit 上 我访问此网站是为了按照说明进行操作http www mono project com Mono Basics 我打开了 mono 命令提示符并编译并运行了控制台 hello wo
  • hyperledger Fabric:找不到 SKI 的匹配私钥

    这是我在 stackoverflow 上的第一篇文章 通常我每次来 stackoverflow 都会找到解决方案 但这次不是 我正在尝试为供应链实施超级账本结构解决方案 我可以执行通道 链码 addpeers 我还可以通过终端实例化和调用链
  • 验证 WinForm 中的数据

    我在 WinForms 应用程序中创建了一个对话框 它有许多文本框和确定 取消按钮 当用户单击 确定 时 我只希望在所有条目均有效的情况下关闭对话框 我可以看到如何分别使用每个控件的 验证 事件来执行此操作 没事儿 但这些似乎只有在控件失去
  • 如何设置网络视图的初始缩放/宽度

    我试图让 WebView 具有与 Android 浏览器类似的行为 浏览器以尝试使页面宽度适合屏幕的方式打开所有页面 但是 WebView 的默认行为是以 100 像素比例开始 因此它从左上角开始放大 在过去的几个小时里 我一直在尝试找到一
  • T-SQL:UNION ALL 视图不可更新,因为未找到分区列

    如何在具有日期约束的视图中插入 这是单击脚本作为创建表后生成的表 Table 1 CREATE TABLE dbo tbl zaua 1 17 id int NOT NULL date datetime NULL CONSTRAINT PK
  • .xm 和 .s3m 文件无法在 Inno Setup 的 BASS 库中播放,仅播放 .mp3

    当我选择 mp3 文件时 它会在启动 setup exe 时播放 但当我将其更改为 xm 或 s3m 时 它不会播放 Setup AppName Bass Audio Project AppVersion 1 0 DefaultDirNam
  • 如何在 Hadoop/Hive 中搜索具有给定列名的所有表并返回哪些表具有该列名?

    我正在寻找 HDFS Hive 中包含给定列名的所有表 截至目前 我想没有直接的方法可以找到配置单元中具有特定列的表 但我建议使用 hive 元存储来实现此目的 如果它能满足您的要求的话 如果您的 hive 元存储在 mysql 中配置 则
  • 在 QTableView 的未使用区域中捕获双击

    我的应用程序从一个空表开始 我想实现不同的方法来添加项目 一种方法是双击表格中未被任何单元格占用的未使用区域 或 背景 双击单元格时 我想要默认行为 我找到了通过重新实现来做到这一点的方法QAbstractScrollArea mouseD
  • R中提取混合数字和字符的字符串的数字部分

    我有很多字符串 每个字符串往往具有以下格式 Ab Cd 001234 txt我想将其替换为001234 我怎样才能在R中实现它 The stringr软件包有很多适合此类工作的便捷快捷方式 input data following agst
  • 为什么SecurityContext的Authentication对象不能跨线程共享?

    我有时会遇到问题AuthenticationCredentialsNotFoundException 目前我认为这是一个线程问题 根据另一个问题 link the SecurityContext是通过HttpSession不同线程之间的对象
  • Java Spring mvc 中的 Angular Js 发布日期错误请求

    在 Java Spring MVC 项目中 我将一个对象发布到 RestController 并且我发布的对象具有日期属性 如果我删除此属性 该帖子就会成功 但对于 date 属性 它会返回 400 bad request 在 dto 中
  • 在运行时更改 ctypes 的 LD_LIBRARY_PATH

    如何在运行时更新此环境变量 以便 ctypes 可以在任何地方加载库 我尝试过以下方法 但似乎都不起作用 from ctypes import os environ LD LIBRARY PATH home starlon Projects
  • 如何在实体框架 5 中表达“有多个通过”关系?

    我正在尝试使用 Entity Framework 5 查询现有的 MySQL 数据库 我使用代码优先创建一个基于代码的模型 该模型映射到以下现有数据库MSDN 上的这个教程 我有两张桌子 users and buddies A User h
  • 这是使用接口回调的正确方法吗?

    I read this and this并发现在课堂上B我需要保存对类的引用A当课堂上发生什么事时B我们执行由该类的接口定义的方法A实施 好吧 不知何故我明白了 我以稍微不同的方式使用接口来调用回调 interface IHelper vo
  • 如何在 SQL Server 中同时将数据插入到两个表中?

    假设我的表结构如下所示 CREATE TABLE dbo table1 id int IDENTITY 1 1 NOT NULL data varchar 255 NOT NULL CONSTRAINT PK table1 PRIMARY