Before SQL Server 2005, we had the northwind and pubs sample database, these actually shipped with the product. If you did a SQL Server 2000 install, you would see these two database in addition to the system databases.
With SQL Server 2005 this changed, there were no more sample databases included. Instead new databases were made available for download, for a while now we have the AdventureWorks available. Today I wanted to see if there was a AdventureWorks 2016 database available. I couldn't find it. Instead I found the Wide World Importers sample database v1.0.
These sample databases live now on github
Here is the link https://github.com/Microsoft/sql-server-samples
As a normal person you will probably navigate to the databases folder https://github.com/Microsoft/sql-server-samples/tree/master/samples/databases and in there you will probably go to https://github.com/Microsoft/sql-server-samples/tree/master/samples/databases/wide-world-importers/wwi-database-scripts
Then you will see the following scripts
Now if your name is Denis or you like to waste time (or both), you think..cool I will download this repo and run these files. That is not unreasonable to think...... but
To save you some time, here is the easiest way to put this database on your SQL Server instance
Instead of running those scripts, go to this page https://github.com/Microsoft/sql-server-samples/releases/tag/wide-world-importers-v1.0 scroll down to downloads, download the 121 MB file named WideWorldImporters-Full.bak
While that is downloading, create a folder on you C drive named SQL, in that folder create 2 folders one named Data and one named Log, it should look like in the image below
Now assuming the backup file is on the C drive, here is what the restore command should look like
USE [master] RESTORE DATABASE [WideWorldImporters] FROM DISK = N'C:\WideWorldImporters-Full.bak' WITH FILE = 1, MOVE N'WWI_Primary' TO N'C:\SQL\DATA\WideWorldImporters.mdf', MOVE N'WWI_UserData' TO N'C:\SQL\DATA\WideWorldImporters_UserData.ndf', MOVE N'WWI_Log' TO N'C:\SQL\Log\WideWorldImporters.ldf', MOVE N'WWI_InMemory_Data_1' TO N'C:\SQL\DATA\WideWorldImporters_InMemory_Data_1', NOUNLOAD, REPLACE, STATS = 5 GO
On SQL Server vNext 1.1, the output looks like this from the command above
5 percent processed.
10 percent processed.
15 percent processed.
20 percent processed.
25 percent processed.
30 percent processed.
Processed 1464 pages for database 'WideWorldImporters', file 'WWI_Primary' on file 1.
Processed 53096 pages for database 'WideWorldImporters', file 'WWI_UserData' on file 1.
Processed 33 pages for database 'WideWorldImporters', file 'WWI_Log' on file 1.
Processed 3862 pages for database 'WideWorldImporters', file 'WWI_InMemory_Data_1' on file 1.
Converting database 'WideWorldImporters' from version 852 to the current version 860.
Database 'WideWorldImporters' running the upgrade step from version 852 to version 853.
Database 'WideWorldImporters' running the upgrade step from version 853 to version 854.
Database 'WideWorldImporters' running the upgrade step from version 854 to version 855.
Database 'WideWorldImporters' running the upgrade step from version 855 to version 856.
Database 'WideWorldImporters' running the upgrade step from version 856 to version 857.
Database 'WideWorldImporters' running the upgrade step from version 857 to version 858.
Database 'WideWorldImporters' running the upgrade step from version 858 to version 859.
Database 'WideWorldImporters' running the upgrade step from version 859 to version 860.
100 percent processed.
RESTORE DATABASE successfully processed 58455 pages in 6.105 seconds (74.803 MB/sec).
To make sure everything is cool after the restore is done, run the following
USE WideWorldImporters GO select [Website].[CalculateCustomerPrice](1,number,'20160101') from master..spt_values where type = 'p' select [Website].[CalculateCustomerPrice](customerid,1,'20160101') from Sales.customers
And now we can even check that the function is visible in the new sys.dm_exec_function_stats DMV
SELECT TOP 10 d.object_id, d.database_id, OBJECT_NAME(object_id, database_id) AS 'function name', d.cached_time, d.last_execution_time, d.total_elapsed_time, d.total_elapsed_time/d.execution_count AS [avg_elapsed_time], d.last_elapsed_time, d.execution_count FROM sys.dm_exec_function_stats AS d ORDER BY [total_worker_time] DESC;
And here is the output
As you can see, we can see this function was executed a bunch of time
So there you have it, this is how you create the DB.... I also now understand why Brent Ozar uses the Stackoverflow DB for his posts, at least it is easy to find .., if you prefer that over this example, head over here: https://www.brentozar.com/archive/2015/10/how-to-download-the-stack-overflow-database-via-bittorrent/