Is there a way to set a global directive so that it executes every request?
No.
Collation is not a session property that applies to requests, and it cannot be changed dynamically.
, , : , , -, , .. , . , , , , " ", . (.. TOP (n), ORDER BY ..), .
, , , , :
( ) Dynamic SQL:
DECLARE @SQL NVARCHAR(MAX),
@Collation NVARCHAR(50);
SET @Collation = '';
IF (@CaseInsensitive = 1)
BEGIN
SET @Collation = N'COLLATE Latin1_general_CI_AI';
END;
SET @SQL = N'SELECT *
FROM Venue
WHERE Name ' + @Collation + N' LIKE ''%' + @SearchParam
+ N'%'' ' + @Collation;
EXEC(@SQL);
. :
- ( ):
@SearchParam = 'This'
- :
@SearchParam = '[tT] [hH] [iI] [sS]'
. , - , :
SELECT *
FROM Venue
WHERE CASE @CaseInsensitive
WHEN 1 THEN LOWER(Name)
ELSE Name
END
LIKE
CASE @CaseInsensitive
WHEN 1 THEN '%' + LOWER(@SearchParam) + '%'
ELSE '%' + @SearchParam + '%'
END;
LOWER() :
IF (@CaseInsensitive = 1)
BEGIN
SET @SearchParam = LOWER(@SearchParam);
END;
SELECT *
FROM Venue
WHERE CASE @CaseInsensitive
WHEN 1 THEN LOWER(Name)
ELSE Name
END
LIKE '%' + @SearchParam + '%';
share