Last active
July 1, 2016 15:18
-
-
Save Alex-Yates/6e506882994c032a4d0fab7fd222524e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Run this script on an empty database called SimpleTalk or SimpleTalk_Dev etc | |
Script created by SQL Compare version 11.5.2 from Red Gate Software Ltd at 01/07/2016 15:50:08 | |
*/ | |
SET NUMERIC_ROUNDABORT OFF | |
GO | |
SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON | |
GO | |
SET XACT_ABORT ON | |
GO | |
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE | |
GO | |
BEGIN TRANSACTION | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[Contacts]' | |
GO | |
CREATE TABLE [dbo].[Contacts] | |
( | |
[ContactsID] [int] NOT NULL IDENTITY(1, 1), | |
[ContactFullName] [nvarchar] (100) COLLATE Latin1_General_CI_AS NOT NULL, | |
[PhoneWork] [nvarchar] (25) COLLATE Latin1_General_CI_AS NULL, | |
[PhoneMobile] [nvarchar] (25) COLLATE Latin1_General_CI_AS NULL, | |
[Address1] [nvarchar] (128) COLLATE Latin1_General_CI_AS NULL, | |
[Address2] [nvarchar] (128) COLLATE Latin1_General_CI_AS NULL, | |
[Address3] [nvarchar] (128) COLLATE Latin1_General_CI_AS NULL, | |
[CountryCode] [nvarchar] (4) COLLATE Latin1_General_CI_AS NULL CONSTRAINT [DF__Contacts__Countr__117F9D94] DEFAULT (N'US'), | |
[JoiningDate] [datetime] NULL CONSTRAINT [DF__Contacts__Joinin__1273C1CD] DEFAULT (getdate()), | |
[ModifiedDate] [datetime] NULL, | |
[Email] [nvarchar] (256) COLLATE Latin1_General_CI_AS NULL, | |
[Photo] [image] NULL, | |
[LinkedIn] [nvarchar] (128) COLLATE SQL_Latin1_General_CP1_CI_AS NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK__Contacts__912F378B7C53D1A0] on [dbo].[Contacts]' | |
GO | |
ALTER TABLE [dbo].[Contacts] ADD CONSTRAINT [PK__Contacts__912F378B7C53D1A0] PRIMARY KEY CLUSTERED ([ContactsID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[prcAddContact]' | |
GO | |
/* | |
Sample execution: | |
EXEC [prcAddContact] 'david', '12345', '23456', '152 Riverside Place', 'Cambridge', '', 'feedback@red-gate.com', NULL | |
*/ | |
CREATE PROCEDURE [dbo].[prcAddContact] @ContactFullName VARCHAR(30), | |
@PhoneWork VARCHAR(30) = NULL, | |
@PhoneMobile VARCHAR(30) = NULL, | |
@Address1 VARCHAR(30) = NULL, | |
@Address2 VARCHAR(30) = NULL, | |
@Address3 VARCHAR(30) = NULL, | |
@Email VARCHAR(30) = NULL, | |
@JoiningDate DATETIME = NULL | |
WITH EXECUTE AS CALLER | |
AS | |
BEGIN | |
INSERT INTO dbo.Contacts | |
( ContactFullName , | |
PhoneWork , | |
PhoneMobile , | |
Address1 , | |
Address2 , | |
Address3 , | |
JoiningDate , | |
ModifiedDate , | |
) | |
VALUES ( @ContactFullName , -- ContactFullName - nvarchar(100) | |
@PhoneWork , -- PhoneWork - nvarchar(25) | |
@PhoneMobile , -- PhoneMobile - nvarchar(25) | |
@Address1 , -- Address1 - nvarchar(128) | |
@Address2 , -- Address2 - nvarchar(128) | |
@Address3 , -- Address3 - nvarchar(128) | |
@JoiningDate , -- JoiningDate - datetime, e.g. '2012-01-17 11:42:45' | |
GETDATE() , -- ModifiedDate - datetime | |
@Email -- Email - nvarchar(256) | |
) | |
END; | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[Articles]' | |
GO | |
CREATE TABLE [dbo].[Articles] | |
( | |
[ArticlesID] [int] NOT NULL IDENTITY(1, 1), | |
[AuthorID] [int] NULL, | |
[Title] [char] (142) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[Description] [varchar] (max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[Article] [varchar] (max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[PublishDate] [datetime] NULL, | |
[ModifiedDate] [datetime] NULL, | |
[URL] [char] (200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[Comments] [int] NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK_Article] on [dbo].[Articles]' | |
GO | |
ALTER TABLE [dbo].[Articles] ADD CONSTRAINT [PK_Article] PRIMARY KEY CLUSTERED ([ArticlesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[ArticlePrices]' | |
GO | |
CREATE TABLE [dbo].[ArticlePrices] | |
( | |
[ArticlePricesID] [int] NOT NULL IDENTITY(1, 1), | |
[ArticlesID] [int] NULL, | |
[Price] [money] NULL, | |
[ValidFrom] [datetime] NULL CONSTRAINT [DF__ArticlePr__Valid__1CF15040] DEFAULT (getdate()), | |
[ValidTo] [datetime] NULL, | |
[Active] [char] (1) COLLATE Latin1_General_CI_AS NULL CONSTRAINT [DF__ArticlePr__Activ__1DE57479] DEFAULT ('N'), | |
[SalesPrice] [char] (1) COLLATE Latin1_General_CI_AS NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK_ArticlePrices] on [dbo].[ArticlePrices]' | |
GO | |
ALTER TABLE [dbo].[ArticlePrices] ADD CONSTRAINT [PK_ArticlePrices] PRIMARY KEY CLUSTERED ([ArticlePricesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating index [IX_ArticlePrices] on [dbo].[ArticlePrices]' | |
GO | |
CREATE NONCLUSTERED INDEX [IX_ArticlePrices] ON [dbo].[ArticlePrices] ([ArticlesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating index [IX_ArticlePrices_1] on [dbo].[ArticlePrices]' | |
GO | |
CREATE NONCLUSTERED INDEX [IX_ArticlePrices_1] ON [dbo].[ArticlePrices] ([ValidFrom]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating index [IX_ArticlePrices_2] on [dbo].[ArticlePrices]' | |
GO | |
CREATE NONCLUSTERED INDEX [IX_ArticlePrices_2] ON [dbo].[ArticlePrices] ([ValidTo]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[ArticlesPriceList]' | |
GO | |
-- Create indexed view | |
CREATE VIEW [dbo].[ArticlesPriceList] | |
AS | |
SELECT a.ArticlesID, a.Description AS Articles, ap.Price | |
FROM dbo.Articles AS a LEFT JOIN | |
dbo.ArticlePrices AS ap ON a.ArticlesID = ap.ArticlePricesID | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[CountryCodes]' | |
GO | |
CREATE TABLE [dbo].[CountryCodes] | |
( | |
[CountryName] [nvarchar] (255) COLLATE Latin1_General_CI_AS NULL, | |
[CountryCode] [nvarchar] (4) COLLATE Latin1_General_CI_AS NOT NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK_Countries] on [dbo].[CountryCodes]' | |
GO | |
ALTER TABLE [dbo].[CountryCodes] ADD CONSTRAINT [PK_Countries] PRIMARY KEY CLUSTERED ([CountryCode]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[calculateEstimateOfReadingTime]' | |
GO | |
-- This is a much more accurate function | |
CREATE FUNCTION [dbo].[calculateEstimateOfReadingTime] ( @value VARCHAR(MAX) ) | |
RETURNS INT | |
BEGIN | |
DECLARE @ret AS INT = 1 , | |
@i AS INT = 1; | |
WHILE @i <= LEN(@value) | |
BEGIN | |
IF SUBSTRING(@value, @i, 1) = ' ' | |
BEGIN | |
SET @ret = @ret + 1; | |
END | |
SET @i = @i + 1; | |
END | |
RETURN @ret / 250; | |
END | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[v_Articles]' | |
GO | |
/* This view gets called from the ST web app to show the articles */ | |
CREATE VIEW [dbo].[v_Articles] | |
AS | |
SELECT TOP 250 a.[Title] , | |
a.[PublishDate] , | |
a.[Description] , | |
a.[URL] , | |
a.[Comments], | |
dbo.calculateEstimateOfReadingTime(a.Article) AS readingTime, | |
c.[ContactFullName] , | |
c.[Photo], | |
cc.CountryCode, | |
cc.CountryName | |
FROM Articles a | |
LEFT JOIN Contacts c ON a.AuthorID = c.ContactsID | |
LEFT JOIN dbo.CountryCodes cc ON c.CountryCode = cc.Countrycode | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[Blogs]' | |
GO | |
CREATE TABLE [dbo].[Blogs] | |
( | |
[BlogsID] [int] NOT NULL IDENTITY(1, 1), | |
[AuthorID] [int] NULL, | |
[Title] [char] (142) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[Article] [varchar] (max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[PublishDate] [datetime] NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK__Blogs__C03C1E467AEB09A9] on [dbo].[Blogs]' | |
GO | |
ALTER TABLE [dbo].[Blogs] ADD CONSTRAINT [PK__Blogs__C03C1E467AEB09A9] PRIMARY KEY CLUSTERED ([BlogsID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[v_Blogs]' | |
GO | |
CREATE VIEW [dbo].[v_Blogs] | |
AS | |
SELECT c.ContactFullName, Title, Article, PublishDate | |
FROM Blogs | |
INNER JOIN dbo.Contacts c ON c.ContactsID = dbo.Blogs.AuthorID | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[ufnGetBlogInformation]' | |
GO | |
CREATE FUNCTION [dbo].[ufnGetBlogInformation] (@Contact INT) | |
RETURNS @retBlogInformation TABLE (-- Columns returned by the function | |
[AuthorID] INT NOT NULL, | |
[Title] [nvarchar](50) NULL) | |
AS | |
BEGIN | |
INSERT INTO @retBlogInformation | |
SELECT AuthorID, Title | |
FROM dbo.Blogs | |
WHERE AuthorID=@Contact | |
RETURN | |
END | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[prcAddBlog]' | |
GO | |
CREATE PROCEDURE [dbo].[prcAddBlog] | |
@Author VARCHAR(30), | |
@Title VARCHAR(142) = NULL, | |
@Article VARCHAR(MAX) = NULL | |
WITH EXECUTE AS CALLER | |
AS | |
BEGIN | |
INSERT INTO dbo.Blogs (AuthorID, Title, Article, PublishDate) | |
VALUES (@Author, @Title, @Article, GETDATE()) | |
END; | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[prcGetContacts]' | |
GO | |
CREATE PROCEDURE [dbo].[prcGetContacts] | |
AS | |
SELECT * | |
FROM Contacts | |
-- v4 | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[RSSFeeds]' | |
GO | |
CREATE TABLE [dbo].[RSSFeeds] | |
( | |
[RSSFeedID] [int] NOT NULL IDENTITY(1, 1), | |
[FeedName] [varchar] (max) COLLATE Latin1_General_CI_AS NULL, | |
[Checked] [bit] NULL, | |
[FeedBurner] [bit] NOT NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK__RSSFeeds__DF1690F2C1F77AC5] on [dbo].[RSSFeeds]' | |
GO | |
ALTER TABLE [dbo].[RSSFeeds] ADD CONSTRAINT [PK__RSSFeeds__DF1690F2C1F77AC5] PRIMARY KEY CLUSTERED ([RSSFeedID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[prcGetRSSFeeds]' | |
GO | |
CREATE PROCEDURE [dbo].[prcGetRSSFeeds] | |
AS | |
SELECT RSSFeedID, | |
FeedName, | |
Checked | |
FROM dbo.RSSFeeds | |
-- v5 | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[ArticlePurchases]' | |
GO | |
CREATE TABLE [dbo].[ArticlePurchases] | |
( | |
[ArticlePurchasesID] [int] NOT NULL IDENTITY(1, 1), | |
[ArticlePricesID] [int] NOT NULL, | |
[Quantity] [int] NOT NULL CONSTRAINT [DF__ArticlePu__Quant__22AA2996] DEFAULT ((1)), | |
[InvoiceNumber] [nvarchar] (20) COLLATE Latin1_General_CI_AS NULL, | |
[PurchaseDate] [datetime] NOT NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK_ArticlePurchases] on [dbo].[ArticlePurchases]' | |
GO | |
ALTER TABLE [dbo].[ArticlePurchases] ADD CONSTRAINT [PK_ArticlePurchases] PRIMARY KEY CLUSTERED ([ArticlePurchasesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[BlogComments]' | |
GO | |
CREATE TABLE [dbo].[BlogComments] | |
( | |
[BlogCommentsID] [int] NOT NULL IDENTITY(1, 1), | |
[BlogsID] [int] NOT NULL, | |
[CommentText] [nvarchar] (200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[CommentDate] [datetime] NOT NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK__BlogComments] on [dbo].[BlogComments]' | |
GO | |
ALTER TABLE [dbo].[BlogComments] ADD CONSTRAINT [PK__BlogComments] PRIMARY KEY CLUSTERED ([BlogCommentsID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[ArticleDescriptions]' | |
GO | |
CREATE TABLE [dbo].[ArticleDescriptions] | |
( | |
[ArticlesID] [int] NOT NULL IDENTITY(1, 1), | |
[ShortDescription] [nvarchar] (2000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[Description] [text] COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[ArticlesName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, | |
[Picture] [image] NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK_ArticleDescriptions] on [dbo].[ArticleDescriptions]' | |
GO | |
ALTER TABLE [dbo].[ArticleDescriptions] ADD CONSTRAINT [PK_ArticleDescriptions] PRIMARY KEY CLUSTERED ([ArticlesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[ArticleReferences]' | |
GO | |
CREATE TABLE [dbo].[ArticleReferences] | |
( | |
[ArticlesID] [int] NOT NULL IDENTITY(1, 1), | |
[Reference] [varchar] (50) COLLATE Latin1_General_CI_AS NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK_ArticleReferences] on [dbo].[ArticleReferences]' | |
GO | |
ALTER TABLE [dbo].[ArticleReferences] ADD CONSTRAINT [PK_ArticleReferences] PRIMARY KEY CLUSTERED ([ArticlesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[ntsh]' | |
GO | |
/* This "nothing to see here" function does nothing but slow down v_Articles */ | |
CREATE FUNCTION [dbo].[ntsh] (@x INT, @n INT) | |
RETURNS INT | |
WITH SCHEMABINDING AS | |
BEGIN | |
DECLARE @retval AS INT; | |
DECLARE @i INT = 0 | |
-- Set i to 100 or greater to slow v_Articles to >100ms | |
WHILE @i < @n | |
BEGIN | |
SET @i = @i + 1; | |
END | |
SET @retval = @x; | |
RETURN @retval ; | |
END; | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[PersonData]' | |
GO | |
CREATE TABLE [dbo].[PersonData] | |
( | |
[ID] [int] NOT NULL IDENTITY(1, 1), | |
[NAME] [nvarchar] (200) COLLATE Latin1_General_CI_AS NOT NULL, | |
[Email1] [nvarchar] (200) COLLATE Latin1_General_CI_AS NULL, | |
[Email2] [nvarchar] (200) COLLATE Latin1_General_CI_AS NULL, | |
[Phone1] [nvarchar] (100) COLLATE Latin1_General_CI_AS NULL, | |
[Phone2] [nvarchar] (100) COLLATE Latin1_General_CI_AS NULL, | |
[Street1] [nvarchar] (200) COLLATE Latin1_General_CI_AS NULL, | |
[City1] [nvarchar] (200) COLLATE Latin1_General_CI_AS NULL, | |
[StateProvince1] [nvarchar] (50) COLLATE Latin1_General_CI_AS NULL, | |
[PostalCode1] [nvarchar] (50) COLLATE Latin1_General_CI_AS NULL, | |
[Street2] [nvarchar] (200) COLLATE Latin1_General_CI_AS NULL, | |
[City2] [nvarchar] (200) COLLATE Latin1_General_CI_AS NULL, | |
[StateProvince2] [nvarchar] (50) COLLATE Latin1_General_CI_AS NULL, | |
[PostalCode2] [nvarchar] (50) COLLATE Latin1_General_CI_AS NULL | |
) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating primary key [PK__PersonDa__3214EC27CA5DC9C3] on [dbo].[PersonData]' | |
GO | |
ALTER TABLE [dbo].[PersonData] ADD CONSTRAINT [PK__PersonDa__3214EC27CA5DC9C3] PRIMARY KEY CLUSTERED ([ID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating [dbo].[prcProcedureWithDynamicSQL]' | |
GO | |
/* This is a procedure that simply contains dynamic SQL just to demonstrate that dependencies aren't picked up. | |
Use SQL Search to find these. */ | |
CREATE PROCEDURE [dbo].[prcProcedureWithDynamicSQL] | |
AS | |
BEGIN | |
EXECUTE ('SELECT count(*) FROM Contacts WHERE ContactFullName LIKE ''D%''') | |
END | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Adding foreign keys to [dbo].[BlogComments]' | |
GO | |
ALTER TABLE [dbo].[BlogComments] WITH NOCHECK ADD CONSTRAINT [FK__BlogComments] FOREIGN KEY ([BlogsID]) REFERENCES [dbo].[Blogs] ([BlogsID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Adding foreign keys to [dbo].[ArticleDescriptions]' | |
GO | |
ALTER TABLE [dbo].[ArticleDescriptions] ADD CONSTRAINT [FK_ArticleDescriptions] FOREIGN KEY ([ArticlesID]) REFERENCES [dbo].[Articles] ([ArticlesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Adding foreign keys to [dbo].[ArticlePrices]' | |
GO | |
ALTER TABLE [dbo].[ArticlePrices] ADD CONSTRAINT [FK_ArticlePrices] FOREIGN KEY ([ArticlesID]) REFERENCES [dbo].[Articles] ([ArticlesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Adding foreign keys to [dbo].[ArticleReferences]' | |
GO | |
ALTER TABLE [dbo].[ArticleReferences] ADD CONSTRAINT [FK_Articles] FOREIGN KEY ([ArticlesID]) REFERENCES [dbo].[Articles] ([ArticlesID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Adding foreign keys to [dbo].[Articles]' | |
GO | |
ALTER TABLE [dbo].[Articles] ADD CONSTRAINT [FK_Author] FOREIGN KEY ([AuthorID]) REFERENCES [dbo].[Contacts] ([ContactsID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Adding foreign keys to [dbo].[Blogs]' | |
GO | |
ALTER TABLE [dbo].[Blogs] ADD CONSTRAINT [FK_BlogAuthor] FOREIGN KEY ([AuthorID]) REFERENCES [dbo].[Contacts] ([ContactsID]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Adding foreign keys to [dbo].[Contacts]' | |
GO | |
ALTER TABLE [dbo].[Contacts] ADD CONSTRAINT [FK__Contacts__Countr__145C0A3F] FOREIGN KEY ([CountryCode]) REFERENCES [dbo].[CountryCodes] ([CountryCode]) | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Creating extended properties' | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Function to estimate how long an average reader will take to read an article based on its length. | |
This is infomation that will be displayed alongside the article summary on the main Simple Talk home page. | |
Research indicates that an average person can read 250 words in a minute.', 'SCHEMA', N'dbo', 'FUNCTION', N'calculateEstimateOfReadingTime', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The article text', 'SCHEMA', N'dbo', 'FUNCTION', N'calculateEstimateOfReadingTime', 'PARAMETER', N'@value' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'This used to deliberately slow down the loading of the articles view, but is now deprecated. | |
The inefficient version of dbo.calculateEstimateOfReadingTime function achieves the same.', 'SCHEMA', N'dbo', 'FUNCTION', N'ntsh', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'This function returns a table with basic infomation pulled from the Blogs table', 'SCHEMA', N'dbo', 'FUNCTION', N'ufnGetBlogInformation', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'A short summary of the article appearing on the main Simple Talk page', 'SCHEMA', N'dbo', 'TABLE', N'ArticleDescriptions', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Deprecated - do not use', 'SCHEMA', N'dbo', 'TABLE', N'ArticleDescriptions', 'COLUMN', N'ArticlesName' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Deprecated - do not use', 'SCHEMA', N'dbo', 'TABLE', N'ArticleDescriptions', 'COLUMN', N'Description' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Deprecated - do not use', 'SCHEMA', N'dbo', 'TABLE', N'ArticleDescriptions', 'COLUMN', N'Picture' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The description that appears on the main web page', 'SCHEMA', N'dbo', 'TABLE', N'ArticleDescriptions', 'COLUMN', N'ShortDescription' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'How much was paid for the article', 'SCHEMA', N'dbo', 'TABLE', N'ArticlePrices', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'References listed in an article', 'SCHEMA', N'dbo', 'TABLE', N'ArticleReferences', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Table of Simple Talk articles', 'SCHEMA', N'dbo', 'TABLE', N'Articles', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The actual article content', 'SCHEMA', N'dbo', 'TABLE', N'Articles', 'COLUMN', N'Article' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The number of reader comments for a given article', 'SCHEMA', N'dbo', 'TABLE', N'Articles', 'COLUMN', N'Comments' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'A short description of the article going between the title and "read more"', 'SCHEMA', N'dbo', 'TABLE', N'Articles', 'COLUMN', N'Description' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'When the article was last modified', 'SCHEMA', N'dbo', 'TABLE', N'Articles', 'COLUMN', N'ModifiedDate' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'When the article was published', 'SCHEMA', N'dbo', 'TABLE', N'Articles', 'COLUMN', N'PublishDate' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The main title - appears on main web page as well as heading the article page', 'SCHEMA', N'dbo', 'TABLE', N'Articles', 'COLUMN', N'Title' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The hyperlink when the title or "read more" is clicked', 'SCHEMA', N'dbo', 'TABLE', N'Articles', 'COLUMN', N'URL' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Comments made by readers', 'SCHEMA', N'dbo', 'TABLE', N'BlogComments', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The date the comment was made', 'SCHEMA', N'dbo', 'TABLE', N'BlogComments', 'COLUMN', N'CommentDate' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The text for the comment', 'SCHEMA', N'dbo', 'TABLE', N'BlogComments', 'COLUMN', N'CommentText' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Blog posts made by Simple Talk members', 'SCHEMA', N'dbo', 'TABLE', N'Blogs', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'The body text for the Blog', 'SCHEMA', N'dbo', 'TABLE', N'Blogs', 'COLUMN', N'Article' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Authors link back to the Contacts table', 'SCHEMA', N'dbo', 'TABLE', N'Blogs', 'COLUMN', N'AuthorID' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Date the Blog was published', 'SCHEMA', N'dbo', 'TABLE', N'Blogs', 'COLUMN', N'PublishDate' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Title of a Blog', 'SCHEMA', N'dbo', 'TABLE', N'Blogs', 'COLUMN', N'Title' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'A list of all Simple Talk members, including authors, bloggers, and any other member or contributor', 'SCHEMA', N'dbo', 'TABLE', N'Contacts', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Contact name', 'SCHEMA', N'dbo', 'TABLE', N'Contacts', 'COLUMN', N'ContactFullName' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Country for the given address', 'SCHEMA', N'dbo', 'TABLE', N'Contacts', 'COLUMN', N'CountryCode' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Contact email address', 'SCHEMA', N'dbo', 'TABLE', N'Contacts', 'COLUMN', N'Email' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'When the contact joined Simple Talk', 'SCHEMA', N'dbo', 'TABLE', N'Contacts', 'COLUMN', N'JoiningDate' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'When the contact details were last modified', 'SCHEMA', N'dbo', 'TABLE', N'Contacts', 'COLUMN', N'ModifiedDate' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Photo of contact, especially authors. | |
This is now deprecated as the photos are saved as image files outside of the database.', 'SCHEMA', N'dbo', 'TABLE', N'Contacts', 'COLUMN', N'Photo' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'A list of country codes | |
ISO 3166-1-alpha-2 code | |
http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm', 'SCHEMA', N'dbo', 'TABLE', N'CountryCodes', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'In theory shouldn''t need more than two characters', 'SCHEMA', N'dbo', 'TABLE', N'CountryCodes', 'COLUMN', N'CountryCode' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'A feature to create a custom RSS feed', 'SCHEMA', N'dbo', 'TABLE', N'RSSFeeds', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Whether checked by default on the list offered to users', 'SCHEMA', N'dbo', 'TABLE', N'RSSFeeds', 'COLUMN', N'Checked' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Eg, SQL, .NET, SysAdmin, Opinion etc.', 'SCHEMA', N'dbo', 'TABLE', N'RSSFeeds', 'COLUMN', N'FeedName' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Procedure to add a new blog post to Simple Talk', 'SCHEMA', N'dbo', 'PROCEDURE', N'prcAddBlog', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Add a new contact to the Simple Talk community', 'SCHEMA', N'dbo', 'PROCEDURE', N'prcAddContact', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'This serves no purpose except to demonstrate that SQL Search can find object names referenced in dynamic SQL, whereas other methods and tools can''t.', 'SCHEMA', N'dbo', 'PROCEDURE', N'prcProcedureWithDynamicSQL', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'This is the view that is called from the web application to display the articles on the main Simple Talk website', 'SCHEMA', N'dbo', 'VIEW', N'v_Articles', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'Note: photos are no longer pulled from the database.', 'SCHEMA', N'dbo', 'VIEW', N'v_Articles', 'COLUMN', N'Photo' | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
EXEC sp_addextendedproperty N'MS_Description', N'View to pull down list of blogs', 'SCHEMA', N'dbo', 'VIEW', N'v_Blogs', NULL, NULL | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Altering permissions on [dbo].[ArticlePrices]' | |
GO | |
DENY REFERENCES ON [dbo].[ArticlePrices] TO [public] | |
GO | |
GRANT SELECT ON [dbo].[ArticlePrices] TO [public] | |
GO | |
DENY INSERT ON [dbo].[ArticlePrices] TO [public] | |
GO | |
DENY DELETE ON [dbo].[ArticlePrices] TO [public] | |
GO | |
DENY UPDATE ON [dbo].[ArticlePrices] TO [public] | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
PRINT N'Altering permissions on [dbo].[Blogs]' | |
GO | |
DENY REFERENCES ON [dbo].[Blogs] TO [public] | |
GO | |
GRANT SELECT ON [dbo].[Blogs] TO [public] | |
GO | |
DENY INSERT ON [dbo].[Blogs] TO [public] | |
GO | |
DENY DELETE ON [dbo].[Blogs] TO [public] | |
GO | |
DENY UPDATE ON [dbo].[Blogs] TO [public] | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
COMMIT TRANSACTION | |
GO | |
IF @@ERROR <> 0 SET NOEXEC ON | |
GO | |
DECLARE @Success AS BIT | |
SET @Success = 1 | |
SET NOEXEC OFF | |
IF (@Success = 1) PRINT 'The database update succeeded' | |
ELSE BEGIN | |
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION | |
PRINT 'The database update failed' | |
END | |
GO |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment