遇到存储过程参数是长字符串的时候,like作筛选条件的效率非常差。
可以通过function把它转化为table,然后用IN做where条件。
/**
Example: SELECT F1 FROM dbo.f_splitstr ('a,b,c,d',',')
**/
CREATE FUNCTION [dbo].[f_splitstr]
(
@SourceSql VARCHAR(8000)
,@StrSeprate VARCHAR(100)
)
RETURNS @temp TABLE(F1 VARCHAR(50))
AS
BEGIN
DECLARE @ch AS VARCHAR(100)
SET @SourceSql = @SourceSql + @StrSeprate
WHILE (@SourceSql <> '')
BEGIN
SET @ch = LEFT(@SourceSql ,CHARINDEX(',' ,@SourceSql ,1) -1)
INSERT @temp VALUES(@ch)
SET @SourceSql = STUFF(@SourceSql ,1 ,CHARINDEX(',' ,@SourceSql ,1) ,'')
END
RETURN
END