仅当使用列列表并且 IDENTITY_INSERT 为ON时,才能为表“XXX”中的标识列指定显式值

在尝试向含自增列的表TABLE1插入数据时遇到问题,错误提示与自增列有关。解决方法是使用SETIDENTITY_INSERTTABLE1ON,然后指定列名进行插入,从TABLE2选择数据。完成后用SETIDENTITY_INSERTTABLE1OFF关闭该设置。不指定列名会导致插入失败。
今天给一个表插入数据时,提示如题,后尝试发现是因为有自增列的原因,打开IDENTITY—INSERT即可

SET IDENTITY_INSERT TABLE1 ON;
insert into TABLE1

(id,store_no,commodity_no,mem_price,price,discount_price,create_time,update_time,send_flag) select * from TABLE2;
SET IDENTITY_INSERT TABLE1 OFF;

只不过,插入时要指定列名,不指定列名无法插入

### 如何在 SQL Server 中设置 IDENTITY_INSERTON 并成功插入标识列SQL Server 中,如果需要向标识列插入,必须先将 `IDENTITY_INSERT` 设置为 `ON`。此操作限于当前会话,并且一次只能对一个启用该功能[^3]。以下是一个完整的解决方案,包括如何正确设置和插入数据。 #### 步骤说明 1. **确保权限**:只有数据库所有者或具有适当权限的用户才能更改 `IDENTITY_INSERT` 的状态。 2. **设置 IDENTITY_INSERTON**:使用 `SET IDENTITY_INSERT` 语句将目标的 `IDENTITY_INSERT` 属性设置为 `ON`。 3. **执行插入操作**:在此状态下执行插入语句,指定标识列。 4. **重置 IDENTITY_INSERT 为 OFF**:完成插入后,立即将 `IDENTITY_INSERT` 设置回 `OFF`,以恢复默认行为。 #### 示例代码 以下是具体的操作示例: ```sql -- 假设名为 OrderList,包含标识列 Id 和其他 Name SET IDENTITY_INSERT OrderList ON; -- 启用插入标识列 -- 插入数据,指定标识列 INSERT INTO OrderList (Id, Name) VALUES (1, 'Product A'); -- 完成插入后,立即禁用插入标识列 SET IDENTITY_INSERT OrderList OFF; ``` #### 注意事项 - 如果尝试在同一会话中为多个启用 `IDENTITY_INSERT`,SQL Server 将返回错误,提示当前已有启用了此属性。 - 插入完成后应立即关闭 `IDENTITY_INSERT`,以避免潜在的安全风险或数据完整性问题。 - 确保插入的不会违反唯一性约束或其他级别的限制。 #### 错误处理 如果仍然遇到错误,例如消息 544,则可能是因为以下原因之一: 1. 当前会话中另一个已启用了 `IDENTITY_INSERT`。 2. 结构不支持标识列插入,或者用户权限不足[^1]。 解决方法是检查当前会话中是否还有其他启用了 `IDENTITY_INSERT`,并确保权限正确。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值