SQL: Przykładowe dane do testowania wydajności aplikacji

3-Lip-2015

Microsoft dostarcza do testowania MS SQL Server przykładowe dane w postaci szkoleniowej bazy danych AdventureWorks. Wielu na nią narzeka, że zbyt skomplikowana. Dawniej można było uczyć się i ćwiczyć na bazie NorthWind lub Pubs. Były to bazy o o wiele prostszej strukturze. Przykładowe bazy można pobrać z:

Ostatnio jednak kolega potrzebował bazy większej niż AdventureWorks. Chodziło o testowanie aplikacji, która na różne sposoby pobierała by dane. Nie wystarczało zwykłe złączenie sys.objects z samym sobą, bo dane miały mieć strukturę hierarchiczną. Kilka prób i poniżej masz skrypt, który podwaja zamówienia (przepisując istniejące). Skrypt można uruchamiać nawet kilka razy, co spowoduje zawsze podwajanie rekordów w tabelach Sales.OrderHeader i Sales.OrderDetail:

USE [AdventureWorks2014]
--BEGIN TRAN

--stan przed
SELECT COUNT(*) FROM Sales.SalesOrderHeader
SELECT COUNT(*) FROM [Sales].[SalesOrderDetail]

--chwilowe dodanie id
ALTER TABLE Sales.SalesOrderHeader ADD old_id int
go
--zdublowanie zamowien
INSERT INTO Sales.SalesOrderHeader
           ([RevisionNumber]
           ,[OrderDate]
           ,[DueDate]
           ,[ShipDate]
           ,[Status]
           ,[OnlineOrderFlag]
           ,[PurchaseOrderNumber]
           ,[AccountNumber]
           ,[CustomerID]
           ,[SalesPersonID]
           ,[TerritoryID]
           ,[BillToAddressID]
           ,[ShipToAddressID]
           ,[ShipMethodID]
           ,[CreditCardID]
           ,[CreditCardApprovalCode]
           ,[CurrencyRateID]
           ,[SubTotal]
           ,[TaxAmt]
           ,[Freight]
           ,[Comment]
           ,[rowguid]
           ,[ModifiedDate]
           ,[old_id])
SELECT
[RevisionNumber]
           ,[OrderDate]
           ,[DueDate]
           ,[ShipDate]
           ,[Status]
           ,[OnlineOrderFlag]
           ,[PurchaseOrderNumber]
           ,[AccountNumber]
           ,[CustomerID]
           ,[SalesPersonID]
           ,[TerritoryID]
           ,[BillToAddressID]
           ,[ShipToAddressID]
           ,[ShipMethodID]
           ,[CreditCardID]
           ,[CreditCardApprovalCode]
           ,[CurrencyRateID]
           ,[SubTotal]
           ,[TaxAmt]
           ,[Freight]
           ,[Comment]
           ,NEWID()
           ,[ModifiedDate]
   ,SalesOrderID
FROM Sales.SalesOrderHeader

--zdublowanie pozycji zamowien

INSERT INTO Sales.SalesOrderDetail
           ([SalesOrderID]
           ,[CarrierTrackingNumber]
           ,[OrderQty]
           ,[ProductID]
           ,[SpecialOfferID]
           ,[UnitPrice]
           ,[UnitPriceDiscount]
           ,[rowguid]
           ,[ModifiedDate])
SELECT  oh.[SalesOrderID]
      ,[CarrierTrackingNumber]
      ,[OrderQty]
      ,[ProductID]
      ,[SpecialOfferID]
      ,[UnitPrice]
      ,[UnitPriceDiscount]
      ,NEWID()
      ,GetDate()
  FROM Sales.SalesOrderDetail od
  JOIN Sales.SalesOrderHeader oh ON od.SalesOrderID = oh.old_id

ALTER TABLE Sales.SalesOrderHeader DROP column old_id

--stan po
SELECT COUNT(*) FROM Sales.SalesOrderHeader
SELECT COUNT(*) FROM Sales.SalesOrderDetail
--COMMIT

 

Dodaj komentarz:

Autor: Rafał Kraik