使用 SQL Server 2019 (v15.0.2000.5) 和 SQL Server Management Studio 15.0.18390.0。
我有一个带有简单作业的存盘程序:向表中添加值。
CREATE DATABASE productsdb;
GO
CREATE TABLE Products
(
Id INT PRIMARY KEY IDENTITY,
ProductName NVARCHAR(30) NOT NULL,
Manufacturer NVARCHAR(30) NOT NULL,
Price MONEY NOT NULL,
InStockAmount INT DEFAULT 0 NOT NULL
);
CREATE PROCEDURE AddProduct
@name NVARCHAR(30),
@manufacturer NVARCHAR(30),
@price MONEY,
@amount INT
AS
INSERT INTO Products(ProductName, Manufacturer, Price, InStockAmount)
VALUES (@name, @manufacturer, @price, @amount)
然后我执行程序:
EXEC AddProduct 'Galaxy C7', 'Samsung', 22000, 4
奇怪的魔法发生了:
(1 row affected)
(1 row affected)
(1 row affected)
... [32 times in total]
做的时候SELECT * FROM Products;
,确实有 32 份相同的产品:
ID | 名称 | 制造商 | 数量 | 价格 |
---|---|---|---|---|
143 | 银河C7 | 三星 | 4 | 22000,00 |
144 | 银河C7 | 三星 | 5 | 22000,00 |
145 | 银河C7 | 三星 | 5 | 22000,00 |
146 | 银河C7 | 三星 | 5 | 22000,00 |
147 | 银河C7 | 三星 | 5 | 22000,00 |
148 | 银河C7 | 三星 | 5 | 22000,00 |
... | ... | ... | ... | ... |
另外,我注意到金额不知何故从 4 变为 5。
任何想法可能是意外回圈的问题?
uj5u.com热心网友回复:
我没有分开批次。
在对程序进行编码后,我决定通过执行来测验它,但在同一批次中。这使得程序递回(EXEC
呼叫包含在程序中):
CREATE PROCEDURE AddProduct
@name NVARCHAR(30),
@manufacturer NVARCHAR(30),
@price MONEY,
@amount INT
AS
INSERT INTO Products (ProductName, Manufacturer, Price, InStockAmount)
VALUES (@name, @manufacturer, @price, @amount);
-- Here I didn't separate the batches, which was a mistake
EXEC AddProduct 'Galaxy C7', 'Samsung', 22000, 4;
添加GO
评论已解决问题的宣告。
0 评论