【问题标题】:Stored procedure - INSERT INTO and UPDATE in one query存储过程 - 在一个查询中插入和更新
【发布时间】:2021-07-25 07:00:45
【问题描述】:

我想创建一个存储过程。我有 2 个数据库 - 一个包含客户数据,第二个包含折扣代码。我想为每个客户分配代码。该代码只能分配一次,因此我想在分配代码后将其标记为“已使用”。代码应该只分配给那些没有分配代码的客户。

客户数据库:

CUSTOMER ID CUSTOMER CODE
1 6f73js
2
... ...

DATA_DISCOUNT_CODES:

ID CODE STATUS
1 6f73js USED
2 kdw45s
... ... ...

是否可以在一个查询中使用 INSERT INTO 和 UPDATE ?我试图这样做,但有些东西不起作用。状态更改为“已使用”,但代码未分配。

INSERT INTO CUSTOMERS_DATABASE (CUSTOMER CODE)
SELECT CODE FROM DATA_DISCOUNT_CODES
WHERE STATUS = ''
UPDATE DATA_DISCOUNT_CODES 
SET STATUS = 'Used';

你能帮我写查询吗?

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 你的 DBMS 是什么?
  • 我的 DBMS 是 MySQL 8.0

标签: mysql database stored-procedures sql-update sql-insert


【解决方案1】:
CREATE PROCEDURE <procedure-name> 
AS
BEGIN
    INSERT INTO CUSTOMERS_DATABASE (CUSTOMER_CODE)
        SELECT CODE FROM DATA_DISCOUNT_CODES
        WHERE STATUS = ' '
  
    UPDATE DATA_DISCOUNT_CODES 
    SET STATUS = 'Used';
END
Go

避免在列名“CUSTOMER_CODE”中使用空格。

用_下划线符号替换空格。

【讨论】:

  • 有些东西仍然无法正常工作。状态更新,但代码未分配。该列是空的。
【解决方案2】:

创建存储过程:


CREATE PROCEDURE <procedure-name> @CUSTOMER_CODE INT
AS
INSERT INTO CUSTOMERS_DATADASE VALES (@CUSTOMER_CODE)
UPDATE DATA_DISCOUNT_CODES SET STATUS = 'Used' WHERE CODE = @CUSTOMER_CODE 

执行它


EXECTUE <procedure-name> CUSTOMER_CODE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    • 2018-03-30
    • 1970-01-01
    相关资源
    最近更新 更多