First you need to escape all LIKE characters and use ESCAPE . In addition, your conversion of column B to VARCHAR is by default only VARCHAR (30), so the data in column B has been truncated and does not match, since the @ param2 parameter alone is 35 characters.
See below:
DECLARE @param1 INT, @param2 NVARCHAR(MAX);
SET @param1 = 1
SET @param2 = '[Test_data_forQry],[Next_Test_Data]'
SET @param2 = REPLACE(REPLACE(REPLACE(REPLACE(@param2, '[', '|['), ']', '|]'), '%', '|%'), '_', '|_')
SELECT *
FROM Table1
WHERE
ColumnA = @param1
AND CONVERT(NVARCHAR(MAX), ColumnB) LIKE ('%,' + @param2 +',%') ESCAPE '|';
:, ColumnB , "[Test_data_forQry]", , , ColumnB @param2:
DECLARE @param1 INT, @param2 NVARCHAR(MAX);
SET @param1 = 1
SET @param2 = '[Test_data_forQry],[Next_Test_Data]'
SELECT *
FROM Table1
WHERE
ColumnA = @param1
AND @param2 LIKE '%' + REPLACE(REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), ColumnB), '[', '|['), ']', '|]'), '%', '|%'), '_', '|_') + '%' ESCAPE '|';
, , , , ColumnA = 1 ColumnB = '[Test_data_forQry].
Update:
, ( , ):
DECLARE @param1 INT, @param2 NVARCHAR(MAX);
SET @param1 = 1
SET @param2 = '[Test_data_forQry],[Next_Test_Data]'
SET @param2 = REPLACE(REPLACE(REPLACE(REPLACE(@param2, '[', '|['), ']', '|]'), '%', '|%'), '_', '|_')
SELECT DISTINCT t.*
FROM Table1 t
INNER JOIN dbo.split(@param2, ',') split ON 1=1
WHERE
t.ColumnA = @param1
AND CONVERT(NVARCHAR(MAX), t.ColumnB) LIKE ('%' + split.s + '%') ESCAPE '|';