Opplæring
Læringsbane
Skrive avanserte Transact-SQL spørringer - Training
Skrive avanserte Transact-SQL spørringer
Denne nettleseren støttes ikke lenger.
Oppgrader til Microsoft Edge for å dra nytte av de nyeste funksjonene, sikkerhetsoppdateringene og den nyeste tekniske støtten.
I Microsoft Fabric låser muligheten for tidsreiser opp muligheten til å spørre i tidligere versjoner av data uten å måtte generere flere datakopier, noe som sparer lagringskostnader. Denne artikkelen beskriver hvordan du spør etter lagertabeller ved hjelp av tidsreiser på setningsnivå, ved hjelp av T-SQL OPTION-setningsdelen og SYNtaksen FOR TIMESTAMP AS OF . Denne funksjonen er en forhåndsvisningsfunksjon.
Lagertabeller kan spørres opp til en oppbevaringsperiode på tretti kalenderdager ved hjelp av setningsdelen OPTION
, som gir datoformatet yyyy-MM-ddTHH:mm:ss[.fff]
.
Eksemplene nedenfor kan kjøres i SQL Power Query-redigering, SQL Server Management Studio (SSMS),Azure Data Studio eller et hvilket som helst redigeringsprogram for T-SQL-spørringer.
Obs!
Foreløpig brukes bare tidssonen Coordinated Universal Time (UTC) for tidsreiser.
Dette eksemplet viser hvordan du tidsreiser på en individuell tabell i lageret.
OPTION T-SQL-setningen angir punkt-i-tiden for å returnere dataene.
/* Time travel using a SELECT statement */
SELECT *
FROM [dbo].[dimension_customer]
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
OPTION-setningsdelen deklareres én gang per spørring, og resultatene av spørringen gjenspeiler tilstanden til dataene ved tidsstempelet som er angitt i spørringen for alle tabeller.
SELECT Sales.StockItemKey,
Sales.Description,
CAST (Sales.Quantity AS int)) AS SoldQuantity,
c.Customer
FROM [dbo].[fact_sale] AS Sales INNER JOIN [dbo].[dimension_customer] AS c
ON Sales.CustomerKey = c.CustomerKey
GROUP BY Sales.StockItemKey, Sales.Description, Sales.Quantity, c.Customer
ORDER BY Sales.StockItemKey
OPTION (FOR TIMESTAMP AS OF '2024-05-02T20:44:13.700');
Lagrede prosedyrer er et sett med SQL-setninger som er forhåndskompilert og lagret, slik at de kan brukes gjentatte ganger. OPTION-setningsdelen kan deklareres én gang i den lagrede prosedyren, og resultatsettet gjenspeiler tilstanden til alle tabeller ved det angitte tidsstempelet.
Setningsdelen FOR TIMESTAMP AS OF
kan ikke godta en variabel direkte, da verdiene i denne OPTION
setningen må være deterministiske. Du kan bruke sp_executesql til å sende en sterkt skrevet datetime-verdi til den lagrede prosedyren. Dette enkle eksemplet sender en variabel og konverterer datetime-parameteren til det nødvendige formatet med datostil 126.
CREATE PROCEDURE [dbo].[sales_by_city] (@pointInTime DATETIME)
AS
BEGIN
DECLARE @selectForTimestampStatement NVARCHAR(4000);
DECLARE @pointInTimeLiteral VARCHAR(33);
SET @pointInTimeLiteral = CONVERT(VARCHAR(33), @pointInTime, 126);
SET @selectForTimestampStatement = '
SELECT *
FROM [dbo].[fact_sale]
OPTION (FOR TIMESTAMP AS OF ''' + @pointInTimeLiteral + ''')';
EXEC sp_executesql @selectForTimestampStatement
END
Deretter kan du kalle den lagrede prosedyren og sende inn en variabel som en sterkt skrevet parameter. Eksempel:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = '2024-05-10T22:56:15.457';
EXEC dbo.sales_by_city @pointInTime;
Eller, for eksempel:
--Execute the stored procedure
DECLARE @pointInTime DATETIME;
SET @pointInTime = DATEADD(dd, -7, GETDATE())
EXEC dbo.sales_by_city @pointInTime;
Visninger representerer en lagret spørring som dynamisk henter data fra én eller flere tabeller når visningen blir spurt. OPTION-setningsdelen kan brukes til å spørre i visningene slik at resultatene gjenspeiler tilstanden til dataene i tidsstempelet som er angitt i spørringen.
--Create View
CREATE VIEW Top10CustomersView
AS
SELECT TOP (10)
FS.[CustomerKey],
DC.[Customer],
SUM(FS.TotalIncludingTax) AS TotalSalesAmount
FROM
[dbo].[dimension_customer] AS DC
INNER JOIN
[dbo].[fact_sale] AS FS ON DC.[CustomerKey] = FS.[CustomerKey]
GROUP BY
FS.[CustomerKey],
DC.[Customer]
ORDER BY
TotalSalesAmount DESC;
/*View of Top10 Customers as of a point in time*/
SELECT *
FROM [Timetravel].[dbo].[Top10CustomersView]
OPTION (FOR TIMESTAMP AS OF '2024-05-01T21:55:27.513');
Hvis du vil ha mer informasjon om tidsreiser på begrensningene på setningsnivå med FOR TIMESTAMP AS OF
, kan du se Begrensninger for tidsreiser.
Opplæring
Læringsbane
Skrive avanserte Transact-SQL spørringer - Training
Skrive avanserte Transact-SQL spørringer