SQL вставляет несколько строк во вторую / вложенную таблицу - PullRequest
2 голосов
/ 03 апреля 2012

Я застрял на этом весь день и наконец сдался.Мне нужно регулярно создавать ежемесячные счета-фактуры для нескольких клиентов каждый месяц.

Поэтому я взял данные из таблицы [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]

1 Ответ

5 голосов
/ 03 апреля 2012

Вы можете использовать предложение OUTPUT, как указано Никола Марковинович :

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
...