SQL SERVER DATABASE CREATION CONFIGURATION Alteration
Posted by Superadmin on April 04 2020 04:47:28
01 CREATE DATABASE simple version.sql

USE [master];
GO

-- What version of SQL Server am I running on?
SELECT  SERVERPROPERTY (N'ProductVersion') AS [ProductVersion] ,
        SERVERPROPERTY (N'ProductLevel') AS [ProductLevel];
GO

-- What databases are already on this SQL Server instance?
SELECT  [name] ,
        [database_id] ,
        [create_date] 
FROM sys.[databases];
GO

-- In the simplest form, we can create a database as follows:
CREATE DATABASE [PluralsightDemo];
GO

-- Rules regarding the name:
--   Maximum 128 characters (123 if the logical name isn't
--   specified for the log file)
--   Can't already be used by another database on the same
--   SQL Server instance

-- Viewing databases on the SQL Server instance, full view of
-- things
SELECT  [name] ,
        [database_id] ,
        [source_database_id] ,
        [owner_sid] ,
        [create_date] ,
        [compatibility_level] ,
        [collation_name] ,
        [user_access] ,
        [user_access_desc] ,
        [is_read_only] ,
        [is_auto_close_on] ,
        [is_auto_shrink_on] ,
        [state] ,
        [state_desc] ,
        [is_in_standby] ,
        [is_cleanly_shutdown] ,
        [is_supplemental_logging_enabled] ,
        [snapshot_isolation_state] ,
        [snapshot_isolation_state_desc] ,
        [is_read_committed_snapshot_on] ,
        [recovery_model] ,
        [recovery_model_desc] ,
        [page_verify_option] ,
        [page_verify_option_desc] ,
        [is_auto_create_stats_on] ,
        [is_auto_update_stats_on] ,
        [is_auto_update_stats_async_on] ,
        [is_ansi_null_default_on] ,
        [is_ansi_nulls_on] ,
        [is_ansi_padding_on] ,
        [is_ansi_warnings_on] ,
        [is_arithabort_on] ,
        [is_concat_null_yields_null_on] ,
        [is_numeric_roundabort_on] ,
        [is_quoted_identifier_on] ,
        [is_recursive_triggers_on] ,
        [is_cursor_close_on_commit_on] ,
        [is_local_cursor_default] ,
        [is_fulltext_enabled] ,
        [is_trustworthy_on] ,
        [is_db_chaining_on] ,
        [is_parameterization_forced] ,
        [is_master_key_encrypted_by_server] ,
        [is_published] ,
        [is_subscribed] ,
        [is_merge_published] ,
        [is_distributor] ,
        [is_sync_with_backup] ,
        [service_broker_guid] ,
        [is_broker_enabled] ,
        [log_reuse_wait] ,
        [log_reuse_wait_desc] ,
        [is_date_correlation_on] ,
        [is_cdc_enabled] ,
        [is_encrypted] ,
        [is_honor_broker_priority_on] ,
        [replica_id] ,
        [group_database_id] ,
        [default_language_lcid] ,
        [default_language_name] ,
        [default_fulltext_language_lcid] ,
        [default_fulltext_language_name] ,
        [is_nested_triggers_on] ,
        [is_transform_noise_words_on] ,
        [two_digit_year_cutoff] ,
        [containment] ,
        [containment_desc] ,
        [target_recovery_time_in_seconds]
FROM    sys.[databases];
GO

-- Given no explicit configurations, what are the details
-- of our new database?
EXEC sys.[sp_helpdb] N'PluralsightDemo';
GO

-- Where is the default path designated?
SELECT  SERVERPROPERTY (N'instancedefaultdatapath') AS [DefaultFile] ,
        SERVERPROPERTY (N'instancedefaultlogpath') AS [DefaultLog];

-- The default path is designated in the registry and you
-- can change via SSMS or via xp_instance_regwrite
USE [master];

EXEC [xp_instance_regwrite] N'HKEY_LOCAL_MACHINE',
    N'Software\Microsoft\MSSQLServer\MSSQLServer',
	N'DefaultData',
	REG_SZ,
    N'S:\SQLskills\MDF';

EXEC [xp_instance_regwrite] N'HKEY_LOCAL_MACHINE',
    N'Software\Microsoft\MSSQLServer\MSSQLServer',
	N'DefaultLog',
	REG_SZ,
    N'S:\SQLskills\LOG';
GO

-- Given no explicit configurations, what are the details
-- of our new database?
EXEC sys.[sp_helpdb] N'PluralsightDemo';
GO

-- Default sizes use the model database
EXEC sys.[sp_helpdb] N'model';
GO

-- Cleanup before the next demo
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO

 


 

 

02 Defining files and file groups with your database creation.sql

 

 

USE [master];

-- Minimum file requirements = 1 primary file and
-- 1 transaction log file
CREATE DATABASE [PluralsightDemo] 
ON PRIMARY
		-- First file in primary filegroup is the primary file
(	NAME = N'PluralsightDemo',-- logical_file_name 		
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ,  
		-- 'os_file_name' 
	SIZE = 1024MB ,
		-- size [ KB | MB | GB | TB ] ] 
	MAXSIZE = UNLIMITED,
		-- max_size [ KB | MB | GB | TB ] | UNLIMITED 
	FILEGROWTH = 1024MB )
		-- growth_increment [ KB | MB | GB | TB | % ] 
LOG ON -- specifies log file details
(	NAME = N'PluralsightDemo_log',
		-- logical_file_name
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
		-- 'os_file_name' 
	SIZE = 1024MB ,
		-- size [ KB | MB | GB | TB ] ]
	MAXSIZE = 2048GB ,
		-- max_size [ KB | MB | GB | TB ] | UNLIMITED 
	FILEGROWTH = 1024MB);
 -- Avoid growth by percentage!
 -- See Paul Randal's blog post, "Importance of data
 -- file size management", http://bit.ly/18NWw9p
GO

EXEC sp_helpdb 'PluralsightDemo';

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO



03 Defining a database with multiple data files.sql

USE [master];

-- Multiple data files
-- A maximum of 32,767 files and 32,767 filegroups
-- (not a goal, mind you)
CREATE DATABASE [PluralsightDemo] 
ON PRIMARY 
(	NAME = N'PluralsightDemo', 
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' , 
	SIZE = 1024MB , 
	FILEGROWTH = 1024MB ), 
(	NAME = N'PluralsightDemo_2', 
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo_2.ndf' , 
	SIZE = 1024MB , 
	FILEGROWTH = 1024MB ) 
LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	FILEGROWTH = 1024MB);
GO

-- Why not have multiple transaction log files?

EXEC sp_helpdb 'PluralsightDemo';

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO



04 Creating a database with a user-defined filegroup.sql

USE [master];

-- User-defined filegroup - why use them?
CREATE DATABASE [PluralsightDemo] 
ON PRIMARY 
(	NAME = N'PluralsightDemo', 
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' , 
	SIZE = 1024MB , 
	FILEGROWTH = 1024MB ), 
FILEGROUP [Application] 
(	NAME = N'PluralsightDemo_2', 
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo_2.ndf' , 
	SIZE = 1024MB , 
	FILEGROWTH = 1024MB ) 
LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	FILEGROWTH = 1024MB);
GO

-- What happens if someone adds a table?
USE [PluralsightDemo];
GO

-- Either reference the filegroup explicitly
CREATE TABLE [dbo].[category]
    (
      [category_no] INT IDENTITY (1, 1)
                        NOT NULL ,
      [category_desc] VARCHAR (31) NOT NULL ,
      [category_code] CHAR (2) NOT NULL ,
      CONSTRAINT [category_ident] PRIMARY KEY CLUSTERED
		( [category_no] ASC )
        WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
               IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
               ALLOW_PAGE_LOCKS = ON ) ON [Application]
    )
ON  [Application];
GO

-- Or alternatively, set the filegroup as the default
-- (I recommend this instead of depending on people to remember)
SELECT  [name]
FROM    sys.[filegroups]
WHERE   [is_default] = 1
        AND name = N'Application';
GO

ALTER DATABASE [PluralsightDemo] 
MODIFY FILEGROUP [Application] DEFAULT;
GO

SELECT  [name]
FROM    sys.[filegroups]
WHERE   [is_default] = 1
        AND name = N'Application';
GO

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO



05 Defining collation.sql

USE [master];
GO

/*
	Collations define the code page used for 
	non-Unicode character data type storage and
	sort order for Unicode and non-Unicode character types
*/

-- What is the current SQL Server instance collation?
SELECT  SERVERPROPERTY (N'Collation');
GO

-- What are the current database collation settings?
SELECT  [name] ,
        [database_id] ,
        [collation_name]
FROM    sys.[databases];
GO

-- And what are the collation options?
SELECT  [name] ,
        [description]
FROM    sys.[fn_helpcollations]();
GO

-- Creating a database designating a non-default collation
USE [master];
GO

-- Creating a database with collation explicitly set
CREATE DATABASE [PluralsightDemo] 
ON PRIMARY 	
(	NAME = N'PluralsightDemo',							
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ,  
	SIZE = 4096MB , 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 1024MB ) 
LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	MAXSIZE = 2048GB ,
	FILEGROWTH = 1024MB) 
COLLATE French_CS_AS;
GO

-- We can validate in sys.databases, or also use the
-- following technique
SELECT  DATABASEPROPERTYEX (N'PluralsightDemo', N'Collation')
	AS [Collation];

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO



06 Recovery models.sql

USE [master];
GO

/*
	Recovery model choices:
		
		Simple:
			Recovery to the end of the last full backup, no log 
			backups

		Bulk logged:
			All backup types permitted, reduced log space for 
			minimal logged, bulk operations, but additional risk
			exposure if log is damaged and a limit on
			point-in-time recovery
		
		Full:
			All backup types permitted,point-in-time recovery 
			possible

		See Paul Randal's course "SQL Server: Logging, Recovery,
			and the Transaction Log"
							http://bit.ly/SiSwVS
*/

-- What are the current database settings?
SELECT  [name] ,
        [database_id] ,
        [name] ,
        [recovery_model] ,
        [recovery_model_desc]
FROM    sys.[databases];
GO

-- Create a database
CREATE DATABASE [PluralsightDemo] 
ON PRIMARY 	
(	NAME = N'PluralsightDemo',							
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ,  
	SIZE = 4096MB , 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 1024MB ) 
LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	MAXSIZE = 2048GB ,
	FILEGROWTH = 1024MB);
GO

-- We can validate in sys.databases, or also use the
-- following technique
SELECT  DATABASEPROPERTYEX (N'PluralsightDemo', N'Recovery')
	AS [Recovery Model];
GO

-- Modifying the "model" system database
ALTER DATABASE [model] 
SET RECOVERY SIMPLE; 
GO

CREATE DATABASE [PluralsightDemo2] 
ON PRIMARY 	
(	NAME = N'PluralsightDemo2',							
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo2.mdf' ,  
	SIZE = 4096MB , 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 1024MB ) 
LOG ON 
(	NAME = N'PluralsightDemo2_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo2_log.ldf' , 
	SIZE = 1024MB , 
	MAXSIZE = 2048GB ,
	FILEGROWTH = 1024MB);
GO

-- We can validate in sys.databases, or also use the
-- following technique
SELECT  DATABASEPROPERTYEX(N'PluralsightDemo2', N'Recovery')
	AS [Recovery Model];
GO

-- Modifying the [model] database recovery model back to FULL
ALTER DATABASE [model] SET RECOVERY FULL;
GO

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO

DROP DATABASE [PluralsightDemo2];
GO


07 Database ownership.sql

USE [master];
GO

-- Who are the various database owners?
SELECT  [d].[name] ,
        [d].[database_id] ,
        [d].[source_database_id] ,
        [d].[owner_sid] ,
        [sp].[name] ,
        [d].[create_date]
FROM    sys.[databases] AS [d]
LEFT OUTER JOIN sys.[server_principals] AS [sp] ON 
	[d].[owner_sid] = [sp].[sid];

-- Alternate method
EXEC sp_helpdb;
GO

-- Why does it matter?  One example would be for
--  "EXECUTE as owner" modules 

-- We'll cover how to change ownership in another module




08 DB_CHAINING and TRUSTWORTHY.sql


USE [master];
GO

-- DB_CHAINING
-- Be VERY cautious about enabling this option!
-- Allows the database to be a target or source for
-- cross-database ownership chains.
-- If the sp_configure 'cross db ownership chaining' is enabled,
-- all databases can cross-database chain anyhow.
-- You can't configure this for master, model and tempdb

-- TRUSTWORTHY
-- Again be VERY cautious about enabling this option!
-- Impersonation context via modules can exit the boundaries of
-- the database.
-- Off by default except the msdb database and can't be changed
-- for model and tempdb.

CREATE DATABASE [PluralsightDemo] 
ON PRIMARY 	
(	NAME = N'PluralsightDemo',							
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ,  
	SIZE = 4096MB , 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 1024MB ) 
LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	MAXSIZE = 2048GB ,
	FILEGROWTH = 1024MB) 
WITH DB_CHAINING OFF, TRUSTWORTHY OFF; -- showing you the explicit OFF
GO

-- Confirming the settings
SELECT  [name] ,
        [database_id] ,
        [source_database_id] ,
        [owner_sid] ,
        [is_trustworthy_on] ,
        [is_db_chaining_on]
FROM    sys.[databases];
GO

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO


09 Creating a database by attaching a file.sql

USE [master];
GO

CREATE DATABASE [PluralsightDemo] 
ON PRIMARY 	
(	NAME = N'PluralsightDemo',							
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ,  
	SIZE = 4096MB , 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 1024MB ) 
LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	MAXSIZE = 2048GB ,
	FILEGROWTH = 1024MB);
GO

-- Detaching a database
USE [master];
GO

-- @dbname =  'database_name' (self-explanatory)
-- @skipchecks =  'skipchecks' 
	-- If "false" run UPDATE STATISTICS prior to detach (default)
EXEC master.dbo.sp_detach_db @dbname = N'PluralsightDemo',
    @skipchecks = 'false';
GO

-- Attaching a database
USE [master];
GO

CREATE DATABASE [PluralsightDemo] ON 
( FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ),
( FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' )
    FOR ATTACH;
GO

-- Detach again
EXEC master.dbo.sp_detach_db @dbname = N'PluralsightDemo',
    @skipchecks = 'false';
GO

-- Attaching without the transaction log (implicit attach)
USE [master];

CREATE DATABASE [PluralsightDemo] ON 
( FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' )
    FOR ATTACH;
GO

-- Detach again
EXEC master.dbo.sp_detach_db @dbname = N'PluralsightDemo',
    @skipchecks = 'false';
GO

-- Let's say we lost the transaction log (let's delete it)

-- Attaching without the transaction log (explicit rebuild)
-- Requires a clean shutdown of the database and availability
-- of all data files
CREATE DATABASE [PluralsightDemo] ON 
( FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' )
    FOR ATTACH_REBUILD_LOG;
GO

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO




10 Creating database snapshots.sql

USE [master];
GO

CREATE DATABASE [PluralsightDemo] ON PRIMARY 	
(	NAME = N'PluralsightDemo',							
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ,  
	SIZE = 4096MB , 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 1024MB ) LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	MAXSIZE = 2048GB ,
	FILEGROWTH = 1024MB);
GO

-- Let's create a table and add rows
USE [PluralsightDemo];
GO

CREATE TABLE [dbo].[category]
    (
      [category_no] INT IDENTITY (1, 1)
                        NOT NULL ,
      [category_desc] VARCHAR (31) NOT NULL ,
      [category_code] CHAR (2) NOT NULL ,
      CONSTRAINT [category_ident]
			PRIMARY KEY CLUSTERED ( [category_no] 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

INSERT  [dbo].[category]
        ( [category_desc] ,
          [category_code]
        )
VALUES  ( N'Confections' ,
          N'CF'
        ),
		( N'Beverages' ,
          N'BV'
        ),
		( N'Poultry' ,
          N'PL'
        );
GO

-- Need data as-of a specific period of time?
-- Need to revert data "as of" a specific period of time?
-- (not a substitute for a backup \ recovery strategy)
CREATE DATABASE [PluralsightDemo_Snapshot] ON (
	    NAME = N'PluralsightDemo', -- logical file name
	    FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdfss')
    AS SNAPSHOT OF [PluralsightDemo];
GO 

-- Let's insert a few more rows
INSERT  [dbo].[category]
        ( [category_desc] ,
          [category_code]
        )
VALUES  ( N'Produce' ,
          N'PR'
        ),
		( N'Cereals' ,
          N'CE'
        ),
	   ( N'Meat' ,
          N'MT'
        );
GO

-- Rows in the PluralsightDemo database table
SELECT  [category_desc] ,
        [category_code]
FROM    [dbo].[category];
GO

-- Rows from the snapshot
SELECT  [category_desc] ,
        [category_code]
FROM    [PluralsightDemo_Snapshot].[dbo].[category];
GO

-- Reverting from snapshot (again, not a substitute for a
-- full backup/recovery plan!)
-- Also - beware the following bug:
-- Bug: reverting from a database snapshot shrinks the
-- transaction log to 0.5MB (http://bit.ly/RJxfWf)
USE [master];
GO

RESTORE DATABASE [PluralsightDemo] 
FROM DATABASE_SNAPSHOT = 'PluralsightDemo_Snapshot';
GO 

-- Rows in the PluralsightDemo database table
USE [PluralsightDemo];
GO

SELECT  [category_desc] ,
        [category_code]
FROM    [dbo].[category];
GO

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo_Snapshot];
GO

DROP DATABASE [PluralsightDemo];
GO


 

 

 

11 Accommodating FILESTREAM data.sql

 

 

 

USE [master];
GO

-- Assumption is that the FILESTREAM feature is enabled
-- See the BOL topic, Enable and Configure FILESTREAM
-- http://bit.ly/fuVMeR
-- And note the step "Restart the SQL Server service"  

-- SQL Server Configuration Manager 

-- SQL Server instance option changes
EXEC sp_configure filestream_access_level, 2;
GO
 -- Enables FILESTREAM Transact-SQL and Win32 streaming access
RECONFIGURE;
GO

CREATE DATABASE [PluralsightDemo] 
ON PRIMARY 	
(	NAME = N'PluralsightDemo',							
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ,  
	SIZE = 4096MB , 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 1024MB ), 
FILEGROUP [FileStreamFileGroup] 
CONTAINS FILESTREAM
   (NAME = FileStreamDocuments,
      FILENAME = N'S:\SQLskills\MDF\Documents') 
LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	MAXSIZE = 2048GB ,
	FILEGROWTH = 1024MB);
GO

-- A simple example
USE [PluralsightDemo];
GO

CREATE TABLE [dbo].[FSTest] (
   [FSTestID] INT NOT NULL PRIMARY KEY CLUSTERED IDENTITY (1,1),
   [FSTestGUID] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE,
   [DocumentNM] VARCHAR (50) NOT NULL,
   [DocumentFS] VARBINARY (MAX) FILESTREAM)
FILESTREAM_ON [FileStreamFileGroup];
GO

INSERT [dbo].[FSTest]
([FSTestGUID],[DocumentNM], [DocumentFS])
SELECT NEWID (),
	   'My test file',
	   [BulkColumn]
FROM OPENROWSET(BULK 'S:\SQLskills\testfile.txt', SINGLE_BLOB) AS [o];

SELECT 	[FSTestGUID],
		[DocumentNM], 
		[DocumentFS],
		[DocumentFS].PathName () AS [PathName]
FROM dbo.[FSTest];
GO

-- And there is much more to consider around FILESTREAM, so be sure to check out:
-- Paul Randal's FILESTREAM blog posts, http://bit.ly/IkPYVD

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO



12 Containment settings.sql

 

 

USE [master];
GO

-- First we need to enable it at the SQL Server instance scope
EXEC sp_configure 'contained database authentication', 1;
GO
RECONFIGURE;
GO

-- Next, we can create the contained database
CREATE DATABASE [PluralsightDemo] 
 CONTAINMENT = PARTIAL -- options are NONE or PARTIAL
ON PRIMARY 	
(	NAME = N'PluralsightDemo',							
	FILENAME = N'S:\SQLskills\MDF\PluralsightDemo.mdf' ,  
	SIZE = 4096MB , 
	MAXSIZE = UNLIMITED, 
	FILEGROWTH = 1024MB ) 
LOG ON 
(	NAME = N'PluralsightDemo_log', 
	FILENAME = N'S:\SQLskills\LDF\PluralsightDemo_log.ldf' , 
	SIZE = 1024MB , 
	MAXSIZE = 2048GB ,
	FILEGROWTH = 1024MB)
WITH DEFAULT_FULLTEXT_LANGUAGE = 1033, -- Default full-text language option is used in a full-text index when no language is specified 
	 DEFAULT_LANGUAGE = 1033;  -- Default language for the new user
GO

-- To demonstrate, let's create a test SQL Login
USE [master];
GO

CREATE LOGIN [TestLogin] 
WITH PASSWORD = N'PUwHT8bsDr4bxk', 
	 DEFAULT_DATABASE = [PluralsightDemo], 
	 CHECK_EXPIRATION = OFF, 
	 CHECK_POLICY = OFF;
GO

USE [PluralsightDemo];
GO

CREATE USER [TestLogin] 
	FOR LOGIN [TestLogin];
GO

-- But for existing SQL Login / SQL User mappings, we can
-- make them contained
EXECUTE sp_migrate_user_to_contained 
    @username = N'TestLogin',
    @rename = N'keep_name',
    @disablelogin = N'disable_login';
GO

-- See Object Explorer for the results

-- And we can create the contained user natively as well
USE [PluralsightDemo];
GO

CREATE USER [TestLogin2] 
WITH PASSWORD = N'SQPuO5QzrYqy5T';
GO

-- Cleanup
USE [master];
GO

DROP DATABASE [PluralsightDemo];
GO

DROP LOGIN [TestLogin];
GO