2012-04-03 6 views
2

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

Итак, я взял данные из таблицы [Customers - Main] и создаю все строки [INVOICES], которые мне нужны. Однако я не могу получить [Клиенты - Счета-фактуры] для заполнения каждого счета правильно. Что должно произойти, так это то, что [Счета-фактуры] заполняется правильной информацией из [Customers-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

Какую базу данных мы говорим? –

+4

Комментарий, так как это не имеет значения - рассмотрите возможность использования схем базы данных вместо помещения пробелов в имена таблиц. –

+0

Nikola это SQL Server 2005. Норла, я знаю, это устаревшая база данных с 1997 года! Вот почему в именах есть пробелы. Это большая работа, чтобы изменить все взгляды и код VBA, который с ним связан. – alcomcomputing

ответ

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 
Смежные вопросы