TSQL Challenge 24 - Basic Testing Sandbox



You can use the TSQL Template given below to do a basic testing of the solutions for TSQL Challenge 24

/***********************************************************************
 ---------------------------------------------- 
 BASIC Testing Sandbox for TSQL Challenge 24
 Copyright © beyondrelational.com
 ---------------------------------------------- 

 Notes:
 1. Copy this template and paste in your SSMS Query editor

 2. Insert your query (solution for TSQL Challenge 24) 
    in the Section between "Insert your query below" 
    and "Insert your query above"

 3. Run the whole batch. If you see 
    "Invalid Results...Failed!" getting printed in output 
    window, there is something wrong in the query. 

 Revision History:
 Rev 00 - 21 March 2010 - Jacob Sebastian	- Initial Release
***********************************************************************/
/*
	Create a wrapper procedure around the solution
*/
IF OBJECT_ID('tempdb..#TestSolution') IS NOT NULL BEGIN
	DROP PROCEDURE #TestSolution
END
GO

CREATE PROCEDURE #TestSolution AS
BEGIN
	IF OBJECT_ID('TC24_Schedules','U') IS NOT NULL BEGIN
		DROP TABLE TC24_Schedules
	END
	;

	CREATE TABLE TC24_Schedules (
		SchID INT IDENTITY PRIMARY KEY,
		EmpName VARCHAR(10),
		Activity VARCHAR(15),
		StartTime SMALLDATETIME,
		Duration VARCHAR(5)
	)
	;

	INSERT INTO TC24_Schedules (EmpName, Activity, StartTime, Duration)
	SELECT 'John', 'HR Meeting', '2010-01-01 10:15:00', '01:30' UNION ALL
	SELECT 'John', 'Lunch', '2010-01-01 13:00:00', '00:45' UNION ALL
	SELECT 'John', 'Training', '2010-01-01 15:00:00', '01:00' UNION ALL
	SELECT 'Mike', 'HR Meeting', '2010-01-01 10:15:00', '01:30' UNION ALL
	SELECT 'Mike', 'Lunch', '2010-01-01 13:00:00', '00:45' UNION ALL
	SELECT 'Jessica', 'Training', '2010-01-01 11:20:00', '00:30' 

	IF OBJECT_ID('TC24_ActivityLog','U') IS NOT NULL BEGIN
		DROP TABLE TC24_ActivityLog
	END
	;

	CREATE TABLE TC24_ActivityLog (
		LogID INT IDENTITY PRIMARY KEY,
		EmpName VARCHAR(10),
		Activity VARCHAR(15),
		StartTime SMALLDATETIME,
		Duration VARCHAR(5)
	)
	;

	INSERT INTO TC24_ActivityLog(EmpName, Activity, StartTime, Duration)
	SELECT 'John', 'HR Meeting', '2010-01-01 10:00:00', '00:15' 
	UNION ALL
	SELECT 'John', 'HR Meeting', '2010-01-01 10:30:00', '00:30' 
	UNION ALL
	SELECT 'John', 'HR Meeting', '2010-01-01 11:00:00', '00:30' 
	UNION ALL
	SELECT 'John', 'HR Meeting', '2010-01-01 11:30:00', '00:15' 
	UNION ALL
	SELECT 'John', 'Lunch', '2010-01-01 13:00:00', '00:30' 
	UNION ALL
	SELECT 'John', 'Lunch', '2010-01-01 13:30:00', '00:15' 
	UNION ALL
	SELECT 'John', 'Training', '2010-01-01 15:00:00', '00:30' 
	UNION ALL
	SELECT 'John', 'Training', '2010-01-01 15:30:00', '00:20' 
	UNION ALL
	SELECT 'Mike', 'HR Meeting', '2010-01-01 10:00:00', '00:15' 
	UNION ALL
	SELECT 'Mike', 'HR Meeting', '2010-01-01 10:30:00', '00:30' 
	UNION ALL
	SELECT 'Mike', 'HR Meeting', '2010-01-01 11:00:00', '00:30' 
	UNION ALL
	SELECT 'Mike', 'HR Meeting', '2010-01-01 11:30:00', '00:10' 
	UNION ALL
	SELECT 'Mike', 'Lunch', '2010-01-01 13:00:00', '00:25' 
	UNION ALL
	SELECT 'Mike', 'Lunch', '2010-01-01 13:30:00', '00:25' 
	UNION ALL
	SELECT 'Jessica', 'Training', '2010-01-01 11:00:00', '00:05' 
	UNION ALL
	SELECT 'Jessica', 'Training', '2010-01-01 11:30:00', '00:20' 

	;
	/* Insert your query below */

	/* Insert your query above */
END
GO

SET NOCOUNT ON
/*
	Start the testing phase
*/

DECLARE @x TABLE(
	AutoID INT IDENTITY,
	Date DATETIME,
	EmpName VARCHAR(50),
	Activity VARCHAR(50),
	SchSt VARCHAR(10),
	SchDur VARCHAR(10),
	ActSt VARCHAR(10),
	ActDur VARCHAR(10)
)

-- Execute the code and 
INSERT @x EXEC #TestSolution

DECLARE @z TABLE(
	AutoID INT IDENTITY,
	Date DATETIME,
	EmpName VARCHAR(50),
	Activity VARCHAR(50),
	SchSt VARCHAR(10),
	SchDur VARCHAR(10),
	ActSt VARCHAR(10),
	ActDur VARCHAR(10)
)

INSERT INTO @z(Date, EmpName, Activity, SchSt, SchDur, ActSt, ActDur)
SELECT '2010-01-01','Jessica','Training','11:20','00:30','11:25','00:25'
UNION ALL
SELECT '2010-01-01','John','HR Meeting','10:15','01:30','10:15','01:30'
UNION ALL
SELECT '2010-01-01','John','Lunch','13:00','00:45','13:00','00:45'
UNION ALL
SELECT '2010-01-01','John','Training','15:00','01:00','15:00','00:50'
UNION ALL
SELECT '2010-01-01','Mike','HR Meeting','10:15','01:30','10:15','01:25'
UNION ALL
SELECT '2010-01-01','Mike','Lunch','13:00','00:45','13:05','00:50'

-- Match the output with expected result.
IF EXISTS(
  (SELECT * FROM @x EXCEPT SELECT * FROM @z)
  UNION ALL
  (SELECT * FROM @z EXCEPT SELECT * FROM @x))
BEGIN
  PRINT 'Invalid Results...Failed!'
END ELSE BEGIN
  PRINT 'Congratulations...Passed!'
END