Comparação De Cadeias De Caracteres Com Distinção De Maiúsculas

Preciso de comparar duas cadeias de caracteres num bloco If-Else num procedimento armazenado como

If(@USERNAME='rajat')
begin
select * from table
end
else
begin
select * from table1
end

But the problem with the above approach is ' = ' comparison is case insensível.Preciso de uma abordagem em que a comparação seja sensível à capitalização.

Author: Cœur, 2013-11-28

3 answers

O servidor SQL tem sensibilidade de caso ao nível do servidor, base de dados e coluna. Isto faz parte das propriedades da colação. Então, em seu exemplo, é provável que uma ou mais dessas configurações tenham sido definidas como sem distinção de maiúsculas.

-- Check server collation
SELECT SERVERPROPERTY('COLLATION')

-- Check database collation.
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;

-- Check column collation
select table_name, column_name, collation_name
from information_schema.columns
where table_name = @table_name
Algo como este SQL pode funcionar para ti.
If (@USERNAME='rajat' COLLATE Latin1_General_CS_AS)
.....
 7
Author: RoadWarrior, 2013-11-28 18:07:59
If(@USERNAME='rajat' COLLATE Latin1_General_CS_AS )
begin
select * from table
end
else
begin
select * from table1
end
 2
Author: Mikhail Timofeev, 2013-11-28 12:47:26

Outra forma de forçar a sensibilidade do caso é a convert/cast ambos os argumentos para varbinary tipos: -

declare @string1 as varchar(50) = 'abc'
declare @string2 as varchar(50) = 'ABC'

if @string1=@string2
    print 'same'
else
    print 'different'

if convert(varbinary(50),@string1)=convert(varbinary(50),@string2)
    print 'same'
else
    print 'different'

Produz: -

same
different
 1
Author: dav1dsm1th, 2013-11-29 00:26:50