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
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
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 ?! –
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