I have found a strange behaviour in SQL Server 2000 Service Pack 4.Consider ths query-- Query 1SELECT Number, LEN(Pattern) AS Len, DATALENGTH(Pattern) AS Datalength, '_' + Pattern + '_' AS Output, Pattern, CHARINDEX(Pattern, 'This is the beginning of the alphabet "abcd"') AS PositionFROM ( SELECT Number, CASE Number WHEN 5 THEN '<unknown>' WHEN 1 THEN '1' WHEN 3 THEN '0' WHEN 2 THEN 'ab' ELSE 'abcd' END AS Pattern FROM master..spt_values WHERE Type = 'p' AND Number < 4 ) AS d
This trivial query will yield same result both for SQL Server 2000 and SQL Server 2005Number Len Datalen Output Pattern Pos------ ------ ------ ------ ------ ------ 0 4 4 _abcd_ abcd 401 1 1 _1_ 1 02 2 2 _ab_ ab 343 1 1 _0_ 0 0
Then I decided to replace the 0 (zero) replacement with a CHAR statement like this-- Query 2SELECT Number, LEN(Pattern) AS Len, DATALENGTH(Pattern) AS Datalen, '_' + Pattern + '_' AS Output, Pattern, CHARINDEX(Pattern, 'This is the beginning of the alphabet "abcd"') AS PosFROM ( SELECT Number, CASE Number WHEN 5 THEN '<unknown>' WHEN 1 THEN '1' WHEN 3 THEN CHAR(48) WHEN 2 THEN 'ab' ELSE 'abcd' END AS Pattern FROM master..spt_values WHERE Type = 'p' AND Number < 4 ) AS d
When run on SQL Server 2005, the output is identical so the bug is fixed there.But... When run under SQL Server 2000, the output looks likeNumber Len Datalen Output Pattern Pos------ ------ ------ ------------ ------ ------ 0 4 9 _abcd _ abcd 01 1 9 _1 _ 1 02 2 9 _ab _ ab 03 1 9 _0 _ 0 0
Now the Pattern is a CHAR datatype!I can verify this by setting the current SQL Server 2005 database in compatibility mode 80, and the results are as run on SQL Server 2000.
E 12°55'05.25"N 56°04'39.16"