Blog

If you ever need to run a random drawing contest with a SQL Server database back end, here’s one way to do it:

Create a table to hold each person’s name and email address.  We use EntryID as a primary key, not their name or email, because a person can enter more than once.

CREATE TABLE [dbo].[Entry](
    [EntryID] [int] IDENTITY(1,1) NOT NULL,
    [FullName] [varchar](50) NOT NULL,
    [EmailAddress] [varchar](100) NOT NULL,
    [PrizeWon] [varchar](50) NULL,
 CONSTRAINT [PK_Entry] PRIMARY KEY CLUSTERED
(
    [EntryID] 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 a record each time somebody enters:

INSERT INTO [dbo].[Entry] ([FullName], [EmailAddress])
  VALUES ('Hugo Reyes', 'big-money@no-whammies.com')

Draw a random winner by running this script for each prize:

DECLARE @WinningEntryID INT
SET @WinningEntryID = (SELECT TOP 1 [EntryID] 
  FROM [dbo].[Entry] 
  WHERE [PrizeWon] IS NULL 
  ORDER BY NEWID())
UPDATE [dbo].[Entry]
  SET [PrizeWon] = 'Pound of Bacon'
  WHERE [EntryID] = @WinningEntryID

The “order by newid()” part will give us a random record out of the table.  The “where PrizeWon is null” part will make sure we don’t draw an entry again after it’s already won.

↑ Back to top
  1. Pingback: DMV Data Mining Contest Winners | SQLServerPedia

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>