【问题标题】:Must declare scalar variable '@ID' with OUTPUT INTO必须使用 OUTPUT INTO 声明标量变量“@ID”
【发布时间】:2019-11-06 13:29:53
【问题描述】:

我收到此错误,但我认为我已经声明了它。谁能告诉我哪里出错了?

DECLARE @ID TABLE(OrderID INT)

INSERT INTO [dbo].[Order](UserID, To_Adress, OrderDate, TravelTime, ItemCount, Status, TotalPrice) 
OUTPUT INSERTED.OrderID INTO @ID
VALUES (1, 'BIKINI BOTTOM', '20191030 15:00:00', '20191030 15:35:00', 1, 'InTheMaking', 7.50) 

INSERT INTO [dbo].[Order_Product](OrderID, ProductID) VALUES (@ID, 12)

背景:所以基本上我尝试获取我刚刚插入的自动递增 ID 并尝试实现 DECLARE OUTPUT 方法而不是来自 BugFinder 的评论中的 SCOPE_IDENTITY()-way。 Can I get the ID of the data that I just inserted?

【问题讨论】:

    标签: c# sql database


    【解决方案1】:

    是的,使用FROM 子句,因为值在表中:

    DECLARE @IDS TABLE (OrderID INT);
    
    INSERT INTO [dbo].[Order](UserID, To_Adress, OrderDate, TravelTime, ItemCount, Status, TotalPrice) 
        OUTPUT INSERTED.OrderID INTO @IDS
        VALUES (1, 'BIKINI BOTTOM', '20191030 15:00:00', '20191030 15:35:00', 1, 'InTheMaking', 7.50);
    
    INSERT INTO [dbo].[Order_Product](OrderID, ProductID) 
        SELECT i.OrderID, 12
        FROM @IDS i;
    

    我将名称更改为@IDS,以表明它可以有多行。

    【讨论】:

    • 问题:为什么第二个INSERT改成SELECT而不是VALUES,因为我还是想把那个OrderID填在[Order_Product]表里
    • @Zheng-rongCai . . .因为VALUES() 没有FROM 子句来引用@IDS
    • Oooohhh,对不起,我的错...我没有找到插入和选择之间的联系。该死的,我从没想过这样使用INSERTSELECT :o
    • 这可能不相关,但 Order_Product 中的两个 ID 一起构成主键,所以如果有另一列 ItemAmount 并且每次使用此查询时都会增加,你会怎么做做吗?因为在一个查询中几乎不可能做到这一点。
    • @Zheng-rongCai . . .您可以在用于insertselect 中使用row_number()
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多