TSQL Challenge 21 - Logic Testing Sandbox



/***********************************************************************
 ----------------------------------------------
 LOGIC Testing Sandbox for TSQL Challenge 21
 Copyright © beyondrelational.com
 ----------------------------------------------

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

 2. Insert your query (solution for TSQL Challenge 25)
    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.
    (There may be some basic info as to what is missing/extra as well)

 Revision History:
 Rev 00 - 15 April 2010 - Jesse Roberge   
	- Initial Release 
 Rev 01 - 19 April 2010 - David Barbarin 
	- Added information about lines with invalid results 
             
***********************************************************************/
/*
	Create a wrapper procedure around the solution
*/
IF OBJECT_ID('tempdb.dbo.#TestSolution') IS NOT NULL BEGIN
	DROP PROCEDURE #TestSolution
END
GO

CREATE PROCEDURE #TestSolution AS
BEGIN

DECLARE @t TABLE (AutoID Int IDENTITY(1,1), Id int, ScanNumber NVARCHAR(250))

INSERT INTO @t
SELECT  10,--> 000007059000007059 
' _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _ 
| || || || || |  || ||_ |_|| || || || || |  || ||_ |_|
|_||_||_||_||_|  ||_| _| _||_||_||_||_||_|  ||_| _| _|
                                                      
' UNION ALL
SELECT  11,--> 0123456789 
' _     _  _     _  _  _  _  _ 
| |  | _| _||_||_ |_   ||_||_|
|_|  ||_  _|  | _||_|  ||_| _|
' UNION ALL
SELECT  12,-->  012 34 
'    _     _     _    
   | |  | _|    _||_|
   |_|  ||_     _|  |
                     
' UNION ALL
SELECT  13,--> 01234 
' _     _  _    
| |  | _| _||_|
|_|  ||_  _|  |
|_||_||_||_||_|                                                      
' UNION ALL
SELECT  14,-->  7XXXX 7 
' _                 _ 
  ||_||_|| ||_|     |
  || | ||||| |      |
                    
' UNION ALL
SELECT  15,--> 00000705970590000070597059 
' _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _ 
| || || || || |  || ||_ |_|  || ||_ |_|| || || || || |  || ||_ |_|  || ||_ |_|
|_||_||_||_||_|  ||_| _| _|  ||_| _| _||_||_||_||_||_|  ||_| _| _|  ||_| _| _|
';

/* Insert your query below */

/* Insert your query above */
END
GO

SET NOCOUNT ON
/*
	Start the testing phase
*/
DECLARE @x TABLE(
	AutoID INT IDENTITY PRIMARY KEY CLUSTERED,
	ID Int,
	ScanNumber VarChar(250)
)

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

-- Table to hold the expected results
DECLARE @z TABLE(
	AutoID INT IDENTITY PRIMARY KEY CLUSTERED,
	Id int,
	ScanNumber NVARCHAR(250)
)

INSERT INTO @z([ID],ScanNumber) 
SELECT * FROM (
	SELECT NULL AS [ID], NULL AS [Digit] WHERE 1=2 UNION ALL
	SELECT 10, '000007059000007059' UNION ALL
	SELECT 11, '0123456789' UNION ALL
	SELECT 12, ' 012 34 ' UNION ALL
	SELECT 13, '01234' UNION ALL
	SELECT 14, '7XXXX 7' UNION ALL
	SELECT 15, '00000705970590000070597059' UNION ALL
	SELECT NULL AS [ID], NULL AS [Digit] WHERE 1=2
) AS ScriptedData;

-- 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!';

	-- Lines with invalid results
	SELECT *,'Extra' AS Extra_Missing FROM @x
	EXCEPT
	SELECT *,'Extra' AS Extra_Missing FROM @z
	UNION ALL
	SELECT *,'Missing' AS Extra_Missing FROM @z
	EXCEPT
	SELECT *,'Missing' AS Extra_Missing FROM @x;
END ELSE BEGIN 
	PRINT 'Congratulations...Passed!' 
END;