sql - 如何从临时表中获取最近插入的列的值?

标签 sql sql-server database tsql

我无法在 Select 语句中使用 #ACCT 表的最近插入的 Quantity

ser.ServiceRate * Quantity  

每次我得到错误

Cannot insert the value NULL into column 'Amount'

我只是一个初学者,所以任何解决这个问题的建议都会有所帮助。

DECLARE @MinReservationId INT = (SELECT MIN(f.ReservationId) FROM dbo.Reservation AS f)
DECLARE @MaxReservationId INT = (SELECT MAX(f.ReservationId) FROM dbo.Reservation AS f)
DECLARE @QuantityNew INT

WHILE @MinReservationId <= @MaxReservationId
BEGIN
    CREATE TABLE #Acct
    (
        ServiceId INT,
        Quantity INT --> I WANT THIS VALUE TO BE USED BELOW
    )

    INSERT INTO dbo.[Transaction]
(
    ReservationId,
    ServiceId,
    Rate,
    Quantity,
    Amount      
)   
OUTPUT inserted.ServiceId,Inserted.Quantity
INTO #Acct
(
    ServiceId,
    Quantity
)
SELECT 
    @MinReservationId,
    ser.ServiceId,
    ser.ServiceRate,
    ABS(CHECKSUM(NEWID())%3) + 1,
    ser.ServiceRate * (SELECT acc.Quantity from #Acct as acc) -> QUANTITY from #ACCT should be used here 
FROM dbo.[Service] AS ser

SELECT @MinReservationId=@MinReservationId+1
Drop table #Acct
END

最佳答案

您可以使用 CTE 来捕获为表 dbo.[Service] 的每条记录创建的 NEWID() 值。然后使用此 CTE 执行 INSERT:

;WITH ToInsert AS 
(
   SELECT ServiceId ,
          ServiceRate,
          ABS(CHECKSUM(NEWID())%3) + 1 AS Quantity 
   FROM dbo.[Service] 
)
INSERT INTO dbo.[Transaction]
(
    ReservationId,
    ServiceId,
    Rate,
    Quantity,
    Amount      
)   
SELECT @MinReservationId,
       ServiceId,
       ServiceRate,
       Quantity,
       ServiceRate *  Quantity
FROM ToInsert

关于sql - 如何从临时表中获取最近插入的列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49584549/

相关文章:

mysql - SQL 到 JPQL 的左连接为空

sql - 选项(重新编译)总是更快;为什么?

mysql - 使用 WHERE 和 MIN 条件进行 SQL 更新

sql - 在 R 中调用带参数的 SQL Server 存储过程

SQLDataReader 排序顺序与存储过程顺序

c# - 为同义词表创建字符变异算法

sql-server - 如何从 Amazon RDS 上的 SQL Server 导出/备份数据库

java - 验证 - 数据完整性

Java多线程

java - mysql中使用存储过程导出数据到excel