問題

這個問題已經有一個答案:

  • 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