T-SQL:带有标识列的 CTE

2024-04-13

我正在构建一棵树(物料清单样式),并转换一些数据。考虑下表:

材料清单

  • BomId
  • ParentId

现在我使用 CTE 来填充它:

with BOM as 
(
select @@identity as BomId, null as ParentId <some other fields> from MyTable
union all
select @@identity as BomId, 
       parent.BomId as ParentId,
       some other fields
from MyTable2
inner join BOM parent on blabla)

insert into MyTable3
select * from BOM

问题是:@@identity 只会给我在并集之前插入的最后一条记录的标识。

我可以做什么来获取身份?我可以修改 Table3,但不能修改 Table1 或 Table2

row_number()递归查询有未定义的行为,所以我不能在这里使用它。

我知道我可以使用 GUID,这是唯一的选择吗?


您无法捕获 CTE 中生成的身份。但是,您可以使用以下命令将所有行插入到目标表中null as ParentID然后更新ParentID在单独的更新声明中。为此,您可以使用merge以及所描述的技术here https://stackoverflow.com/questions/5365629/using-merge-output-to-get-mapping-between-source-id-and-target-id.

-- Helper table to map new id's from source
-- against newly created id's in target
declare @IDs table
( 
  TargetID int,
  SourceID int,
  SourceParentID int
)

-- Use merge to capture generated id's
merge BillOfMaterials as T
using SourceTable as S
on 1 = 0
when not matched then
insert (SomeColumn) values(SomeColumn)
output inserted.BomId, S.BomID, S.ParentID into @IDs;

-- Update the parent id with the new id
update T
set ParentID = I2.TargetID
from BillOfMaterials as T
  inner join @IDs as I1
    on T.BomID = I1.TargetID
  inner join @IDs as I2
    on I1.SourceParentID = I2.SourceID

这是完整的工作示例SE-Data https://data.stackexchange.com/stackoverflow/query/67718

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

T-SQL:带有标识列的 CTE 的相关文章

  • 从链接服务器插入存储过程的结果

    是否可以将远程存储过程的结果插入到临时表中 例如 CREATE TABLE test id INT INSERT INTO test EXEC linkedserver remoteDB dbo tst DROP TABLE test 其中
  • 为什么我的 SqlConnection 在关闭后仍保留在 SSMS 进程列表中?

    我有一个 C 控制台应用程序 代码如下 using var cn new SqlConnection cn ConnectionString Data Source localhost Integrated Security True Pe
  • 了解 T-SQL 中的 PIVOT 函数

    我对 SQL 很陌生 我有一个这样的表 ID TeamID UserID ElementID PhaseID Effort 1 1 1 3 5 6 74 2 1 1 3 6 8 25 3 1 1 4 1 2 23 4 1 1 4 5 6 8
  • 当我加入第二个表时总和不正确

    这是我第一次请求你的帮助 实际上我必须创建一个查询 并为其做了一个类似的示例 我有两张桌子 Report ReportID Date headCount Production ProdID ReportID Quantity 我的问题是使用
  • Web2Py 无法连接到 MSSQL

    我无法让 web2py 连接到 mssql
  • 包含 SqlGeometry 的数据表导致存储过程执行失败...为什么?

    我正在尝试保存一系列SqlGeometry值到 SQL Server 2008 数据库 基本上我在 SQL Server 存储过程中有一个表类型 如下所示 CREATE TYPE dbo TableType Example AS TABLE
  • Sql Server CTE“无法绑定多部分标识符。”

    我关于这个 cte 查询的最后一个问题很快就得到了回答 我想我会向你们这些 sql 专家提出下一个问题 如果我可以检查我的基本逻辑 然后显示我的代码和语法错误 任何帮助将不胜感激 我的股票交易系统有三个表 符号表 顾名思义 它是股票代码列表
  • 通过选择插入时,如何在插入表之前检查重复项

    通过选择插入时 如何在插入表之前检查重复项 insert into table1 select col1 col2 from table2 我需要检查 table1 是否已经有 table1 col1 value table2 col1 v
  • C# 和 SQL Server 中嵌套 using 的用法

    这个线程是一个延续是否有理由在 C 中使用子句检查多个内部的 null https stackoverflow com questions 2220422 is there a reason to check for null inside
  • 授予对视图的 SELECT 权限,但不授予对基础对象的 SELECT 权限

    我经常读到 视图的目的之一是安全性 允许某些用户访问基础表 而其他用户仅访问派生视图 考虑到这一点 我设计了几个向外部用户提供受限数据集的视图 一切都很好 但在实践中这是行不通的 我授予后SELECT对视图的权限 除非我授予 否则用户无法访
  • TSQL 多列唯一约束也允许多个 Null

    我目前正在做一些从 MS Access 到 SQL Server 的迁移 Access 允许唯一索引中存在多个 Null 而 SQL Server 不允许 我一直在通过删除 SQL Server 中的索引并添加筛选索引来处理迁移 CREAT
  • SSRS:如何在 ssrs 2008 r2 中创建类似数据透视表的报告 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions I need to create r
  • SQL 层次结构 - 解析给定节点的所有祖先的完整路径

    我有一个由邻接列表描述的层次结构 不一定有单个根元素 但我确实有数据来识别层次结构中的叶 终端 项 所以 一个看起来像这样的层次结构 1 2 4 7 3 5 6 8 9 将通过表格来描述 就像这样 NOTE 我没有能力改变这种格式 id p
  • SQL Server 中 SYSDATETIME 数据类型的准确性

    我已经在 SQL Server 2008 的存储过程中使用 SYSDATETIME 进行了一些测试 我设置了一个包含带有 IDENTITY 字段的 datetime2 7 的表 我了解这种数据类型的精度和准确度之间的差异 但是 在从此示例中
  • 触发器和行版本控制信息

    在什么情况下表触发器会导致在行末尾添加 14 个字节以进行行版本控制 数据行中使用的空间 部分在本页 http msdn microsoft com en us library ms175492 aspx明确指出 每个数据库行可以在行末尾使
  • Oracle使用with子句创建表

    我可以从使用形成的查询创建表吗with clause Sure CREATE TABLE t AS WITH some data AS SELECT 1 as some value FROM dual UNION ALL SELECT 2
  • 如何在sql中查询xml列

    我在 SQL Server 2008 上有一个表 T1 其中包含一个 XML 列 EventXML 我想查询某个节点包含特定值的所有行 更好的是 我想检索不同节点中的值 表T1 T1 EventID int EventTime dateti
  • 单个 sql 查询可以处理 sql server 中的 null 或值日期范围

    使用 SQL Server 2008 我有一个存储过程 其中开始日期和结束日期作为日期范围的输入参数 寻找一个singlesql 查询 其中在 where 子句中有一个开始日期和结束日期 可以处理日期均为空或都有值的两种情况 我不想使用 I
  • SQL 解析键值字符串

    我有一个像这样的逗号分隔字符串 key1 value1 key2 value2 key3 value3 key1 value1 1 key2 value2 1 key3 value3 1 我想将它解析成一个如下所示的表 Key1 Key2
  • 尝试使用 SQL 身份验证登录失败

    我正在尝试使用 sa 用户名及其密码连接到 SQL Server 2008 在 SQL Server 日志文件中我看到以下错误 用户 sa 登录失败 原因 尝试使用 SQL 登录 认证失败 服务器配置为 Windows 身份验证 仅有的 当

随机推荐

  • 具有“不同于”的子集函数?

    是否可以通过说 subset dataset IA LABEL not equal to Er or Sie or Es or wird or gleich 之类的东西来使用子集函数 我感兴趣的是 不等于 运算符 子集函数有类似的东西吗 谢
  • 从文本文件中读取字符串和整数

    假设我有一个如下所示的文件 51 41 52 07 52 01 51 22 50 44 49 97 Coal Diggers 77 26 78 33 78 29 78 12 77 09 75 74 Airplane Flyers 31 25
  • 用Java删除锁定的文件?

    我们必须使用 Windows 上运行的 Java 来删除一些目录及其内容 我担心会遇到被锁定的目录文件 我们可以调用Unlocker http www emptyloop com unlocker 进行删除 或者是否有更以 Java 为中心
  • 在 Swift 中通过 TouchID 生成哈希或字符串 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想在 Swift 中通过 iPhone 上的 Touch ID 创建一个唯一的字符串或散列 我搜索了很多 但没有找到解决方案 你不可以做这
  • 如何删除 POI 生成的 Excel 中的警告?

    I am using Apache POI for writing content into excel sheet after generating an excel in all the cells which ever cell ha
  • 当被调用的 Activity 退出时,如何以自然的方式返回结果?

    什么工作正常 我的应用程序中有 2 个活动 第一个活动调用第二个活动来获取结果 第二个活动显示了新的布局并允许用户执行某些操作 有一个 确定 按钮 当用户按下此按钮时 第二个活动完成并且用户返回到第一个活动 在幕后 第一个活动像这样调用第二
  • 颤动中底片内的文本框

    我有一个如下所示的底页 It has a text box inside it when I cliked on that I am getting something like 我的文本框完全被键盘覆盖 有什么办法可以解决这个问题吗 下面
  • 获取 Android 上的活动驱动程序列表

    有没有一种简单的方法来获取 Android 设备上当前使用的驱动程序列表 lsmod列出了少量驱动程序 3 但我猜测大多数驱动程序都编译到内核中而不是作为模块 显然 像这样的事情make menuconfig由于设备本身缺乏开发工具 没有机
  • 模板参数数量错误的模板参数

    考虑一个模板类 C 它具有通过模板模板参数设置的策略和两个策略定义 template
  • Python应用程序引擎:如何保存图像?

    这是我从 flex 4 文件参考上传中得到的 自我请求 Request POST UPLOAD Accept text Cache Control no cache Connection Keep Alive Content Length
  • 如何找到一个向量中与另一个向量最接近的值?

    我有两个大小相等的向量 例如 A 2 29 2 56 2 77 2 90 2 05 and B 2 34 2 62 2 67 2 44 2 52 我有兴趣在两个相同大小的向量 A 和 B 中找到最接近的值 几乎相等 即在 A 中的所有元素中
  • Zend 框架 website.com/username

    我正在使用 Zend Framework 开发的应用程序之一要求通过 website com username 访问用户的个人资料页面 而其他页面应通过 website com controller name action name 访问
  • 当从 DataTemplateSelector 显式返回 DataTemplate 时,为什么 DataTemplate 无法绑定到接口?

    我创建了一个 DataTemplateSelector 它是使用一组已知接口进行初始化的 如果传递到选择器的项目实现了这些接口之一 则返回关联的数据模板 首先 这是有问题的 ICategory 接口 public interface ICa
  • 使用 T-SQL Merge 语句时如何避免插入重复记录

    我尝试使用 T SQL 的 MERGE 语句插入许多记录 但当源表中存在重复记录时 我的查询无法 INSERT 失败的原因是 目标表有一个基于两列的主键 源表可能包含违反目标表主键约束的重复记录 抛出 违反主键约束 我正在寻找一种方法来更改
  • 如何在 UML 类图中表示“事件”?

    这是我的代码片段 public class Notation INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged private N
  • Perl:查找并替换多个文本文件中的特定字符串

    我需要获取给定目录中的所有 config 文件 并且在每个文件中我需要搜索特定字符串并根据该文件替换为另一个字符串 例如 如果给定目录中有 3 个文件 for my foo config string to search fooCommon
  • Express 3错误中间件未被调用

    我正在尝试为我的 Express 应用程序设置错误处理并遇到以下问题 我定义了一个错误中间件并将其添加为最后一个中间件 error handler app use function err req res next console log
  • Angular 2 - 在下拉列表中设置所选值

    我在 Angular 2 的下拉列表中预选择值时遇到了问题 我在组件中设置了一个颜色数组 并将其成功绑定到下拉列表 我遇到的问题是在页面初始化上预先选择一个值 线路 selected car color id x id 应该选择已在车型上设
  • 元件之间的聚合物通讯

    我想通过聚合物元素实现子父级之间的通信 这是我的index html
  • T-SQL:带有标识列的 CTE

    我正在构建一棵树 物料清单样式 并转换一些数据 考虑下表 材料清单 BomId ParentId 现在我使用 CTE 来填充它 with BOM as select identity as BomId null as ParentId