Since you cannot use the table parameter (and not on SQL Server 2008), try passing it to the CSV sting and store it in a row break.
There are many ways to split a string in SQL Server. This article discusses PRO and CON for almost every method:
"Arrays and Lists in SQL Server 2005 and Beyond when Table Parameters Don't Shorten" Erland Sommarskog
You need to create a split function. Here's how to use the split function:
SELECT * FROM YourTable y INNER JOIN dbo.yourSplitFunction(@Parameter) s ON y.ID=s.Value
I prefer the number table approach to split strings in TSQL , but there are many ways to split strings in SQL Server, see the previous link that explains the PRO and CON of each of them.
For the Numbers Table method to work, you need to perform this setting of a single time table that will create a Numbers table that contains rows from 1 to 10000:
SELECT TOP 10000 IDENTITY(int,1,1) AS Number INTO Numbers FROM sys.objects s1 CROSS JOIN sys.objects s2 ALTER TABLE Numbers ADD CONSTRAINT PK_Numbers PRIMARY KEY CLUSTERED (Number)
Once the Numbers table is configured, create this split function:
CREATE FUNCTION [dbo].[FN_ListToTable] ( @SplitOn char(1) --REQUIRED, the character to split the @List string on ,@List varchar(8000)--REQUIRED, the list to split apart ) RETURNS TABLE AS RETURN ( ---------------- --SINGLE QUERY-- --this will not return empty rows ---------------- SELECT ListValue FROM (SELECT LTRIM(RTRIM(SUBSTRING(List2, number+1, CHARINDEX(@SplitOn, List2, number+1)-number - 1))) AS ListValue FROM ( SELECT @SplitOn + @List + @SplitOn AS List2 ) AS dt INNER JOIN Numbers n ON n.Number < LEN(dt.List2) WHERE SUBSTRING(List2, number, 1) = @SplitOn ) dt2 WHERE ListValue IS NOT NULL AND ListValue!='' ); GO
Now you can easily split the space-delimited string into a table and join or use it, but you need it. These codes are based on the last OP editing question:
CREATE TABLE YourTable (PK int, col1 varchar(20), col2 varchar(20), col3 varchar(20)) --data from question INSERT INTO YourTable VALUES (1,'hello xyz','abc is my last name','and i''ma developer') INSERT INTO YourTable VALUES (2,'hello xyz',null,'and i''ma developer') CREATE PROCEDURE YourProcedure ( @keywords varchar(1000) ) AS SELECT @keywords AS KeyWords,y.* FROM (SELECT t.PK FROM dbo.FN_ListToTable(' ',@keywords) dt INNER JOIN YourTable t ON t.col1 LIKE '%'+dt.ListValue+'%' OR t.col2 LIKE '%'+dt.ListValue+'%' OR t.col3 LIKE '%'+dt.ListValue+'%' GROUP BY t.PK HAVING COUNT(t.PK)=(SELECT COUNT(*) AS CountOf FROM dbo.FN_ListToTable(' ',@keywords)) ) dt INNER JOIN YourTable y ON dt.PK=y.PK GO --from question EXEC YourProcedure 'xyz developer'-- returns 2 rows EXEC YourProcedure 'xyz abc'-- returns 1 row EXEC YourProcedure 'abc developer'-- returns 1 row EXEC YourProcedure 'hello'-- returns 2 rows EXEC YourProcedure 'hello developer'-- returns 2 rows EXEC YourProcedure 'xyz'-- returns 2 rows
OUTPUT:
KeyWords PK col1 col2 col3