【问题标题】:INSERT another field using number from the same id when insert new value插入新值时使用来自同一 id 的数字插入另一个字段
【发布时间】:2014-06-09 02:28:26
【问题描述】:

我正在使用 sql server 2012 我的桌子喜欢

表格:订单

|idOrder| idCustomer | dateTransaction| invoice |
| 1001  | 104        | 2014-06-09     |         |

idOrder 使用自动增量,我想问一下如何获取刚刚插入的 id 订单并与日期交易结合, 我的插入订单的 SP:

BEGIN
INSERT INTO Order
(
 idCustomer,
 transactionDate,
 invoice
)
VALUES
(
 @idCustomer,
 GETDATE(),
 CAST(datepart(year, getdate()) AS VARCHAR(10)) + CAST(datepart(month, getdate()) AS VARCHAR(10)) + CAST(@idCustomer AS VARCHAR(10))
)
END

目前为止

|idOrder| idCustomer | dateTransaction| invoice     |
| 1001  | 104        | 2014-06-09     |  201406104  |

我想要的是

|idOrder| idCustomer | dateTransaction| invoice     |
| 1001  | 104        | 2014-06-09     |  2014061001 | --> 1001 is idOrder

如何在插入新数据的同时将idOrder(自动递增)输入发票字段/或

exec SP insert 后如何更新 exec SP 以获取 idOrder,因为 IdOrder 是自增的,所以它不是参数

谢谢

有效的完整代码!

BEGIN
INSERT INTO Order
(
 idCustomer,
 transactionDate,
 invoice
)
VALUES
(
 @idCustomer,
 GETDATE(),
 CAST(datepart(year, getdate()) AS VARCHAR(10)) + CAST(datepart(month, getdate()) AS VARCHAR(10)) + CAST(@idCustomer AS VARCHAR(10))
)
END

声明@ID INT 选择@ID = SCOPE_IDENTITY() 更新 TR_Order SET Invoice = CAST(Invoice AS VARCHAR) + CAST(@ID AS VARCHAR) WHERE IdOrder = @ID

【问题讨论】:

  • MySQL / SQL Server。选择一个。

标签: mysql sql sql-server


【解决方案1】:

首先插入记录,并通过使用获取插入的ID

SCOPE_IDENTITY()
OR
@@IDENTITY

DECLARE @ID INT
SELECT @ID =  SCOPE_IDENTITY()
UPDATE TABLE_Name
SET Invoice = CAST(Invoice AS VARCHAR) +  CAST(@ID AS VARCHAR)
WHERE IdOrder = @ID

然后再次更新表,因为在插入记录之前无法获取 ID。

【讨论】:

  • 所以在执行 SP 插入时我无法获取 ID?并且必须在插入 ID 后处理 SP 插入和 SP 更新?我们可以在 SP 插入代码中的 SP 插入后执行 SP 更新吗?可以给我样品吗,谢谢
  • 在相同的过程中,您可以在当前代码之后添加上述行,因此插入后它将获取 ID,然后根据需要更新记录。
  • 所以它就像 DECLARE @ ID INT SELECT @ ID = SCOPE_IDENTITY() BEGIN INSERT INTO Order (idCustomer, transactionDate, invoice) VALUES (@idCustomer, GETDATE(), CAST(datepart(year, getdate( )) AS VARCHAR(10)) + CAST(datepart(month, getdate()) AS VARCHAR(10)) + CAST(@idCustomer AS VARCHAR(10)) ) END BEGIN UPDATE Order SET Invoice = CAST(Invoice AS VARCHAR) + CAST(@ID AS VARCHAR) WHERE IdOrder = @ID 这样吗? -- 抱歉@ 后面的空格
  • Insert Into order (....) values (....) select @id = scope_identity() update ....
【解决方案2】:
  1. 插入您的记录
  2. 获取ID
  3. 对该记录执行更新

假设我们有这张桌子

CREATE TABLE my_table (id INT IDENTITY(1,1), col1 VARCHAR(32));

现在这是你的代码


DECLARE @id INT;

 -- here is your insert statement (1)
INSERT INTO my_table (col1) VALUES('000');

-- get the id (2)
SET @id = scope_identity(); 

-- perform update to that record
UPDATE my_table     
SET col1=col1 + CAST(@id AS VARCHAR)
WHERE id=@id;

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    相关资源
    最近更新 更多