拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 程序重复执行

程序重复执行

白鹭 - 2022-03-09 2121 0 0

使用 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 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *