2017-06-12 2 views
0

Ich habe Tabellen, die den aktuellen Bestand an verschiedenen Arten von Produkten, ihren Standort und ihre Kosten enthalten.Daten automatisch aus der Ansicht einfügen

Ich plane, eine Ansicht zu erstellen, die diese Daten am Ende eines jeden Tages, um die Geschichte von meinen Aktien zu halten pro täglich kombinieren wie folgt:

opening stock (of yesterday) --- Sales ---- Closing Stock (today) 

Aber ich weiß nicht, was Dies ist die beste Möglichkeit, dies zu implementieren und Datenduplikationen zu vermeiden. Ich benutze SQL Server, aber ich bin nicht sehr vertraut damit.

+0

Was meinst du mit * Vermeidung von Doppel *? Ansichten fügen keine Daten zu Ihrer Datenbank hinzu, und wenn Sie versuchen, den Bestand, der zu drei verschiedenen Zeitpunkten vorhanden ist, zurückzugeben, sollten Sie eine * Duplizierung * wünschen, wenn der gleiche Artikel bei allen drei ... – iamdave

+0

ich meine, wenn Ich bekomme Daten von der Tabelle in die Ansicht, es wird wie eine Transaktionsgeschichte speziell für den Verkauf aussehen, wenn ich also diese Daten aus der Ansicht in meine neue Tabelle bekomme, in der ich die Historie der Bestände pflegen werde, möchte ich nicht jedes Mal alle Datensätze erfassen . Ich hoffe es ist klar ?! –

+0

Dann verwenden Sie die 'where' Klausel ...? Ich würde Ihnen persönlich empfehlen, über Ihr Datenbankdesign nachzudenken, es klingt sehr schlecht und verstößt gegen die Standardnormalisierungsgrundsätze. – iamdave

Antwort

0

Ich kann mit den folgenden Schritten veranschaulichen, ich nehme an, Ihre Tabelle ist mit Primärschlüsseln definiert, um doppelte Datensatzaktualisierung zu vermeiden.

CREATE TABLE TransactionHistory(
       ProductNo varchar(10) not null 
       ,Product_name varchar(100) not null 
       ,TransactionDate Date 
       ,SalesValue float 
CONSTRAINT [Pk_product] PRIMARY KEY CLUSTERED 
(
    productno asc 
    ,product_name asc 
    ,transactionDate asc 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

- eine Ansicht erstellen nun Daten in die Tabelle

Create View Vw_TransactionHistory 
as 

select 
     ProductNo 
     ,Product_name 
     ,TransactionDate 
     ,SalesValue 

from salesTable 

where transactiondate = getdate()-15 


GO 

so einzufügen, schaut Blick auf letzten 15 Tage Daten oder man könnte es getDate ändern() oder getdate() - 1

--3rd Schritt nun eine Verschmelzungsprozedur erstellen, die Datensätze aktualisiert oder fügt neue Datensätze

CREATE PROCEDURE usp_transactionHistory 
AS 
BEGIN 
    MERGE dbo.TransactionsHistory AS TARGET 
    USING Vw_TransactionHistory AS SOURCE 
     ON (
       TARGET.ProductNo = SOURCE.ProductNo 
       AND TARGET.Product_name = source.Product_name 
       AND TARGET.TransactionDate = SOURCE.TransactionDate 
       AND TARGET.SalesValue = SOURCE.SalesValue 
       ) 
    WHEN MATCHED 
     THEN 
      UPDATE 
      SET TARGET.ProductNo = SOURCE.ProductNo 
       ,TARGET.Product_name = source.Product_name 
       ,TARGET.TransactionDate = SOURCE.TransactionDate 
       ,TARGET.SalesValue = SOURCE.SalesValue 
    WHEN NOT MATCHED BY TARGET 
     THEN 
      INSERT (
       ProductNo 
       ,Product_name 
       ,TransactionDate 
       ,SalesValue 
       ) 
      VALUES (
       SOURCE.ProductNo 
       ,SOURCE.Product_name 
       ,SOURCE.TransactionDate 
       ,SOURCE.SalesValue 
       ); 
END 
GO 
Verwandte Themen