问题

这个问题已经有一个答案:

  • 2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表 从另一个表中将身份列值插入表? 2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表 3个答案 2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表 2001年12月31日终了的两年期收入和支出及准备金和基金结余变动报表

我有以下存储过程我通过ODBC连接访问.

 ALTER PROCEDURE [dbo].[AddTransactions]
    @Transactions dbo.TransactionData READONLY
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    INSERT INTO Transactions (CustomerId, EmployeeId, VehicleId, ProductId, LocationId,
        Number, [Site], [Authorization], [TimeStamp], Odometer, PumpNumber,
        Quantity, UnitPrice, UnitDiscount, TotalAmount, Code)
    SELECT CustomerId, EmployeeId, VehicleId, ProductId, LocationId,
        Number, [Site], [Authorization], [TimeStamp], Odometer, PumpNumber,
        Quantity, UnitPrice, UnitDiscount, TotalAmount, Code
    FROM @Transactions
END
 

我认为这是对的.我想要做的是将Transactions.Id列(由SQL Server创建的身份列)的值插入另一个表(一个只有一个外键列的表).

我熟悉SCOPE_IDENTITY,但@Transactions参数可以最多有25行,我想从每个插入的行插入ID.这可能吗?

  最佳答案

假设您可以获得最后一个插入的 ID:

 ALTER PROCEDURE [dbo].[AddTransactions]
    @Transactions dbo.TransactionData READONLY
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO Transactions (CustomerId, EmployeeId, VehicleId, ProductId, LocationId,
        Number, [Site], [Authorization], [TimeStamp], Odometer, PumpNumber,
        Quantity, UnitPrice, UnitDiscount, TotalAmount, Code)
    OUTPUT INSERTED.ID
    SELECT CustomerId, EmployeeId, VehicleId, ProductId, LocationId,
        Number, [Site], [Authorization], [TimeStamp], Odometer, PumpNumber,
        Quantity, UnitPrice, UnitDiscount, TotalAmount, Code
    FROM @Transactions

    INSERT INTO SomeOtherTable(Id)
    SELECT ID FROM INSERTED
END
 

  相同标签的其他问题

sqlsql-servertsql