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:
- Northwind & Pubs – https://www.microsoft.com/en-us/download/details.aspx?id=23654
- Adventureworks – http://msftdbprodsamples.codeplex.com/ (Baza z nazwą kończącą się na LT oznacza bazę w wersji „Light”, czyli o nieco mniej złożonej strukturze niż pełny AdventureWorks).
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:
1 |
USE [AdventureWorks2014] |
1 |
--BEGIN TRAN |
1 |
1 |
--stan przed |
1 |
SELECT COUNT(*) FROM Sales.SalesOrderHeader |
1 |
SELECT COUNT(*) FROM [Sales].[SalesOrderDetail] |
1 |
1 |
--chwilowe dodanie id |
1 |
ALTER TABLE Sales.SalesOrderHeader ADD old_id int |
1 |
go |
1 |
--zdublowanie zamowien |
1 |
INSERT INTO Sales.SalesOrderHeader |
1 |
([RevisionNumber] |
1 |
,[OrderDate] |
1 |
,[DueDate] |
1 |
,[ShipDate] |
1 |
,[Status] |
1 |
,[OnlineOrderFlag] |
1 |
,[PurchaseOrderNumber] |
1 |
,[AccountNumber] |
1 |
,[CustomerID] |
1 |
,[SalesPersonID] |
1 |
,[TerritoryID] |
1 |
,[BillToAddressID] |
1 |
,[ShipToAddressID] |
1 |
,[ShipMethodID] |
1 |
,[CreditCardID] |
1 |
,[CreditCardApprovalCode] |
1 |
,[CurrencyRateID] |
1 |
,[SubTotal] |
1 |
,[TaxAmt] |
1 |
,[Freight] |
1 |
,[Comment] |
1 |
,[rowguid] |
1 |
,[ModifiedDate] |
1 |
,[old_id]) |
1 |
SELECT |
1 |
[RevisionNumber] |
1 |
,[OrderDate] |
1 |
,[DueDate] |
1 |
,[ShipDate] |
1 |
,[Status] |
1 |
,[OnlineOrderFlag] |
1 |
,[PurchaseOrderNumber] |
1 |
,[AccountNumber] |
1 |
,[CustomerID] |
1 |
,[SalesPersonID] |
1 |
,[TerritoryID] |
1 |
,[BillToAddressID] |
1 |
,[ShipToAddressID] |
1 |
,[ShipMethodID] |
1 |
,[CreditCardID] |
1 |
,[CreditCardApprovalCode] |
1 |
,[CurrencyRateID] |
1 |
,[SubTotal] |
1 |
,[TaxAmt] |
1 |
,[Freight] |
1 |
,[Comment] |
1 |
,NEWID() |
1 |
,[ModifiedDate] |
1 |
,SalesOrderID |
1 |
FROM Sales.SalesOrderHeader |
1 |
1 |
--zdublowanie pozycji zamowien |
1 |
1 |
INSERT INTO Sales.SalesOrderDetail |
1 |
([SalesOrderID] |
1 |
,[CarrierTrackingNumber] |
1 |
,[OrderQty] |
1 |
,[ProductID] |
1 |
,[SpecialOfferID] |
1 |
,[UnitPrice] |
1 |
,[UnitPriceDiscount] |
1 |
,[rowguid] |
1 |
,[ModifiedDate]) |
1 |
SELECT oh.[SalesOrderID] |
1 |
,[CarrierTrackingNumber] |
1 |
,[OrderQty] |
1 |
,[ProductID] |
1 |
,[SpecialOfferID] |
1 |
,[UnitPrice] |
1 |
,[UnitPriceDiscount] |
1 |
,NEWID() |
1 |
,GetDate() |
1 |
FROM Sales.SalesOrderDetail od |
1 |
JOIN Sales.SalesOrderHeader oh ON od.SalesOrderID = oh.old_id |
1 |
1 |
ALTER TABLE Sales.SalesOrderHeader DROP column old_id |
1 |
1 |
--stan po |
1 |
SELECT COUNT(*) FROM Sales.SalesOrderHeader |
1 |
SELECT COUNT(*) FROM Sales.SalesOrderDetail |
1 |
--COMMIT |
1 |