我正在嘗試執行以下操作,但得到「無效的列名{列}」錯誤。有人能幫我看看我的方式錯誤嗎?我們最近將一個交易表分成兩個表格,一個包含經常更新的報告列名稱,另一個包含不變的交易。這讓我試圖改變一個簡單的插入到一個表中的複雜插入到具有唯一列的兩個表中。我試圖做到這一點,像這樣:從單表插入多個表,無效的列名稱錯誤
INSERT INTO dbo.ReportColumns
(
FullName
,Type
,Classification
)
OUTPUT INSERTED.Date, INSERTED.Amount, INSERTED.Id INTO dbo.Transactions
SELECT
[Date]
,Amount
,FullName
,Type
,Classification
FROM {multiple tables}
的「INSERTED.Date,INSERTED.Amount」是錯誤的根源,有或沒有「插入」前面。
----------------- UPDATE ------------------
Aaron是正確的,它是無法用插入來管理,但我能夠極大地改進插入的功能,並使用合併功能添加其他業務規則。我的最終解決方案類似於以下內容:
DECLARE @TransactionsTemp TABLE
(
[Date] DATE NOT NULL,
Amount MONEY NOT NULL,
ReportColumnsId INT NOT NULL
)
MERGE INTO dbo.ReportColumns AS Trgt
USING (SELECT
{FK}
,[Date]
,Amount
,FullName
,Type
,Classification
FROM {multiple tables}) AS Src
ON Src.{FK} = Trgt.{FK}
WHEN MATCHED THEN
UPDATE SET
Trgt.FullName = Src.FullName,
Trgt.Type= Src.Type,
Trgt.Classification = Src.Classification
WHEN NOT MATCHED BY TARGET THEN
INSERT
(
FullName,
Type,
Classification
)
VALUES
(
Src.FullName,
Src.Type,
Src.Classification
)
OUTPUT Src.[Date], Src.Amount, INSERTED.Id INTO @TransactionsTemp;
MERGE INTO dbo.FinancialReport AS Trgt
USING (SELECT
[Date] ,
Amount ,
ReportColumnsId
FROM @TransactionsTemp) AS Src
ON Src.[Date] = Trgt.[Date] AND Src.ReportColumnsId = Trgt.ReportColumnsId
WHEN NOT MATCHED BY TARGET And Src.Amount <> 0 THEN
INSERT
(
[Date],
Amount,
ReportColumnsId
)
VALUES
(
Src.[Date],
Src.Amount,
Src.ReportColumnsId
)
WHEN MATCHED And Src.Amount <> 0 THEN
UPDATE SET Trgt.Amount = Src.Amount
WHEN MATCHED And Src.Amount = 0 THEN
DELETE;
希望在未來幫助其他人。 :)
你可以在這裏查看我的示例:http://granadacoder.wordpress.com/2008/12/10/sqlserver20052008-output-clause-in-insertupdatedelete-statements/ – granadaCoder 2013-04-04 14:25:29