sql-server - 为什么我在编写存储过程时收到错误 8101?
问题描述
我有一张名为 Sales 的表
CREATE TABLE Sales
(
SaleID int IDENTITY(1,1) PRIMARY KEY
,DateOfTransaction dateTime NOT NULL
,QuantitySold int NOT NULL
,PaymentMethod nvarchar(40) NOT NULL
,EquipmentID int FOREIGN KEY REFERENCES Equipments(EquipmentID)
,CustomerID int FOREIGN KEY REFERENCES Customers(CustomerID)
,SalespersonID int FOREIGN KEY REFERENCES Salespersons(SalespersonID)
);
我正在编写一个存储过程,我想在其中插入数据。到目前为止,这是我的代码:
CREATE PROCEDURE dbo.sproc_PurchaseAdd
@SaleID INT OUTPUT
,@DateOfTransaction dateTime
,@QuantitySold int
,@PaymentMethod nvarchar(40)
,@EquipmentId int
,@CustomerID int
,@SalesPersonId int
AS
BEGIN
SET IDENTITY_INSERT Sales ON
INSERT INTO Sales
VALUES (@DateOfTransaction, @QuantitySold, @PaymentMethod, @EquipmentId, @CustomerID, @SalesPersonId)
SET @SaleID = @@IDENTITY
END
GO
但我收到一个错误:
消息 8101,级别 16,状态 1,过程 sproc_PurchaseAdd,第 13 行 [批处理开始第 75 行]
只有在使用列列表并且 IDENTITY_INSERT 为 ON 时,才能为表“销售”中的标识列指定显式值。
我有什么特别的东西吗?请帮帮我
解决方案
SaleID 是 IDENTITY 所以它会自动递增,
你不需要这个:
SET IDENTITY_INSERT Sales ON
还行吧:
INSERT INTO Sales VALUES (@DateOfTransaction,@QuantitySold,@PaymentMethod,@EquipmentId,@CustomerID,@SalesPersonId)
如果这不起作用,请尝试指定列:
INSERT INTO Sales (DateOfTransaction,QuantitySold,PaymentMethod,EquipmentID,CustomerID,SalespersonID) VALUES (@DateOfTransaction,@QuantitySold,@PaymentMethod,@EquipmentId,@CustomerID,@SalesPersonId)
也尝试使用 SCOPE_IDENTITY() 代替 @@IDENTITY
推荐阅读
- ios - 如何在离子中为 WKWebView 实现自定义 NSURLProtocol?
- c++ - 共享内存段 C++ 中类的新实例
- java - 计算所有项目并在控制台上显示
- django - 什么是SeparateDatabaseAndState中的“状态操作”和“数据库操作”?
- python - (调用类)从学生导入学生得到没有名为学生的模块的错误
- css - 悬停幻灯片删除底部边框 - CSS
- git - 如何在本地仓库中构建/测试代码,同时继续修改它
- javascript - 当两个 div zindexes 最大时如何设置 div 堆栈顺序的顶部
- python-3.x - 处理逻辑回归中的可选数据
- mysql - 计算 JSON 数组 mySQL 中的单词