sql-server - 复制整行不包括标识符列
问题描述
我正在尝试将新行插入到表中,该表是除标识符之外的另一行的精确副本。以前我没有遇到过这个问题,因为有一个 ID 列没有自动填充。所以我可以像这样复制一行
INSERT INTO table1 SELECT * FROM table1 WHERE Id = 5
然后像这样手动更改ID
WITH tbl AS (SELECT ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) AS RNr, Id
FROM table1 WHERE Id = 5
UPDATE tbl SET Id = (SELECT MAX(Id) FROM table1) + 1
WHERE RNr = 2
最近,列 ID 已更改为不手动填充(我也更喜欢)。但这会导致错误,即我显然无法填写该列,而这IDENTITY_INSERT
是错误的。不幸的是,我无权SET IDENTITY_INSERT IdentityTable ON/OFF
在声明之前和之后使用,无论如何我也想避免。
我正在寻找一种方法来插入整行,不包括 Id 列,而不在INSERT
andSELECT
语句中命名其他列(这很多)。
解决方案
在下面的代码中,ID 的最大值加一,因此不会违反您的完整性。
insert into table1
select a.Top_ID, Column2, Column3, ColumnX
from table1 t1
outer apply (select max(id_column) + 1as Top_ID from table1) as a
where t1.Id = 1
推荐阅读
- azure-logic-apps - 使用逻辑应用根据大型对象数组中的字段编写新 JSON
- sql - BigQuery - 如何查找 1 个或多个类别中唯一重叠值的计数(分类值计数)?
- sql - 如何根据布尔值将 SQL 行拆分为多行?
- html - 如何防止垂直堆叠的导航下拉菜单覆盖移动设备中的其他导航链接
- flutter - 如何使用 Firestore 和 FirebaseAuth 检查当前用户是否是 Flutter 中的管理员
- c++ - std::shared_ptr 为空但不为空
- vhdl - vhdl 和门返回未知值
- android - Kotlin - 基于选择在数据之间共享视图模型
- mysql - 我添加了一个 MySQL 数据库,现在从单独的 H2 数据库中检索测试失败。注释掉 MySQL 配置使测试通过
- r - 创建具有范围的列