Betrachten Sie das folgende tsql ...tsql string concat mit select und order von funktioniert nicht mit funktion in by by clause?
create function dbo.wtfunc(@s varchar(50)) returns varchar(10) begin return left(@s, 2); end
GO
select t.* into #test from (
select 'blah' as s union
select 'foo' union
select 'bar'
) t
select * from #test;
declare @s varchar(100);
set @s = '';
select @s = @s + s from #test order by s;
select @s;
set @s = '';
select @s = @s + s from #test order by dbo.wtfunc(s);
select @s;
/* 2005 only*/
select cast((select s+'' from #test order by dbo.wtfunc(s) for xml path('')) as varchar(100))
drop function dbo.wtfunc;
drop table #test;
Ich habe versucht, es auf MSSQL 2000 und 2005 und beide haben concat nicht die Zeichenfolge, wenn eine Funktion in der Reihenfolge verwenden. Im Jahr 2005 funktioniert der for xml-Pfad (''). Der Ausgang ist ...
bar
blah
foo
barblahfoo
foo --nothing concatenated?
barblahfoo
Ich kann nicht finden, wo dies dokumentiert ist. Kann jemand etwas darüber sagen, warum das nicht funktioniert?
EDIT:
Hier sind die tatsächlichen Ausführungspläne. Offensichtlich ist die Art und Rechen Skalar ist nicht in der gleichen Reihenfolge ...
alt text http://i41.tinypic.com/2d6pht3.jpg alt text http://i41.tinypic.com/w2og48.png
sehr schöne Entdeckung! – dotjoe