OK, this is a skeleton and would need editing to include however many params that you want to go in there.
IF object_id('tempdb..Equal') IS NOT NULL
BEGIN
DROP FUNCTION Equal;
END;
GO
CREATE FUNCTION Equal (
@XML XML
)
RETURNS VARCHAR(5) AS
BEGIN
DECLARE @Return VARCHAR(5);
SELECT @Return = CASE WHEN MIN(parm) = MAX(parm) THEN 'True' ELSE 'False' END
FROM (SELECT [param]
FROM (SELECT
Tbl.Col.value('p1[1]', 'VARCHAR(MAX)'),
Tbl.Col.value('p2[1]', 'VARCHAR(MAX)'),
Tbl.Col.value('p3[1]', 'VARCHAR(MAX)'),
Tbl.Col.value('p4[1]', 'VARCHAR(MAX)'),
Tbl.Col.value('p5[1]', 'VARCHAR(MAX)'),
Tbl.Col.value('p6[1]', 'VARCHAR(MAX)')
FROM @XML.nodes('//row') Tbl(Col)
)a(p1,p2,p3,p4,p5,p6)
UNPIVOT ([param] FOR value IN (p1,p2,p3,p4,p5,p6))up
) AS X2(parm);
RETURN @Return;
END
If we then take a quick look at the usage with some sample data: -
IF object_id('tempdb..#testEnvironment') IS NOT NULL
BEGIN
DROP TABLE #testEnvironment;
END;
--100 Random rows of data
SELECT TOP 100 IDENTITY(INT,1,1) AS ID,
(ABS(CHECKSUM(NEWID())) % 5) + 1 AS randomSmallInt1,
(ABS(CHECKSUM(NEWID())) % 5) + 1 AS randomSmallInt2
INTO #testEnvironment
FROM master.dbo.syscolumns sc1, master.dbo.syscolumns sc2, master.dbo.syscolumns sc3;
GO
SELECT ID, randomSmallInt1, randomSmallInt2, dbo.Equal(val)
FROM #testEnvironment
CROSS APPLY (SELECT (SELECT randomSmallInt1 AS [p1], randomSmallInt2 AS [p2] FOR XML PATH('row'),TYPE))a(val);