2012-04-03 51 views
2

我一直在這一整天下午陷入困境,最後放棄。我需要每個月定期爲多個客戶創建月度發票。SQL將多行插入到第二個/子表中

因此,我從[Customers - Main]表中獲取數據並創建了所需的所有[INVOICES]行。但是,我無法使[客戶 - 發票]正確填充每張發票。應該發生的是[發票 - 庫存鏈接]中填入[客戶 - 發票]中的正確信息。目前,每個客戶項目均填入1張發票。

這是我到目前爲止的代碼,任何幫助將感激地收到。

ALTER PROCEDURE [aa test] 

AS 

INSERT INTO dbo.[INVOICES] 
(
    CompanyName, InvoiceDate, PurchaseOrderNo, Terms 
    , JobNumber, PrintableNotes, Initials 
) 
SELECT dbo.[CUSTOMERS - Main].CompanyName 
    , DATEADD(d, - 15, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0)) AS Expr1 
    , 'test3' AS pono, 7 AS terms, 0 AS jobno 
    , 'We will attempt to collect this invoice by Direct Debit' AS printnotes 
    , 'KA' AS initials 
FROM dbo.[CUSTOMERS - Main] 
INNER JOIN dbo.[CUSTOMERS - Invoices] 
ON dbo.[CUSTOMERS - Main].CustID = dbo.[CUSTOMERS - Invoices].CustID 
WHERE (dbo.[CUSTOMERS - Invoices].Annual <> 1) And 
    (dbo.[CUSTOMERS - Invoices].DayofMonth = 15) 
GROUP BY dbo.[CUSTOMERS - Main].CompanyName 

SELECT @endInvoice=MAX(InvoiceNo) FROM INVOICES 

INSERT INTO dbo.[INVOICES - Stock Link] (InvoiceNo, StockID, SalePrice) 
SELECT @endinvoice, StockID, Price 
FROM dbo.[CUSTOMERS - Invoices] 
+0

,我們在談論什麼數據庫? – 2012-04-03 14:08:58

+4

評論,因爲這是不相關的 - 請考慮使用數據庫模式,而不是在表名中放置空格。 – 2012-04-03 14:22:35

+0

Nikola它是一個SQL Server 2005. Norla,我知道,它是從1997年開始的遺留數據庫!這就是爲什麼名稱中有空格。改變與之相關的所有視圖和VBA代碼是一項艱鉅的任務。 – alcomcomputing 2012-04-03 14:51:42

回答

5

您可以使用OUTPUT條款由Nikola Markovinović提到:

ALTER PROCEDURE [aa test] 

AS 

-- Setup storage for the inserted keys 
DECLARE @INVOICES TABLE (InvoiceNo int not null primary key) 

INSERT INTO dbo.[INVOICES] 
(
    CompanyName, InvoiceDate, PurchaseOrderNo, Terms 
    , JobNumber, PrintableNotes, Initials 
) 
-- Grab the inserted keys 
OUTPUT INSERTED.InvoiceNo INTO @INVOICES 
SELECT dbo.[CUSTOMERS - Main].CompanyName 
    , DATEADD(d, - 15, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0)) AS Expr1 
    , 'test3' AS pono, 7 AS terms, 0 AS jobno 
    , 'We will attempt to collect this invoice by Direct Debit' AS printnotes 
    , 'KA' AS initials 
FROM dbo.[CUSTOMERS - Main] 
INNER JOIN dbo.[CUSTOMERS - Invoices] 
ON dbo.[CUSTOMERS - Main].CustID = dbo.[CUSTOMERS - Invoices].CustID 
WHERE (dbo.[CUSTOMERS - Invoices].Annual <> 1) And 
    (dbo.[CUSTOMERS - Invoices].DayofMonth = 15) 
GROUP BY dbo.[CUSTOMERS - Main].CompanyName 

INSERT INTO dbo.[INVOICES - Stock Link] (InvoiceNo, StockID, SalePrice) 
-- Not sure where StockID and Price come from 
SELECT a.InvoiceNo, a.StockID, a.Price 
FROM dbo.[CUSTOMERS - Invoices] a 
    -- Join on the keys from above 
    JOIN @INVOICES b ON a.InvoiceNo = b.InvoiceNo 
相關問題