webForumDet fria alternativet

Fråga funkar i SQL-Server 2005, men inte i SQL-Server 2000

15 svar · 813 visningar · startad av devotion

devotionMedlem sedan jan. 20013 582 inlägg
#1

Hej,

Jag har följande fina funktion som splittar upp kommaseparerade värden i ett fält enligt:

CREATE FUNCTION dbo.func_split 
(	
	@sign varchar(255)
)
RETURNS @t TABLE (
    sign varchar(255))
AS
BEGIN
	declare @pos int
	declare @tmp varchar(255)
	
	if right(@sign, 1) <> ';'
	    select @sign = @sign + ';'
	
	select @pos = PATINDEX('%;%', @sign)
	
	while @pos <> 0
	begin
	    select @tmp = left(@sign, @pos - 1)
	    select @sign = stuff(@sign, 1, @pos, '')
	    select @pos = PATINDEX('%;%', @sign)
	    
	    insert @t (sign)
	    select @tmp
	end
RETURN 
END

Följande urvalsfråga fungerar finfint i SQL-server 2005, men inte i SQL-Server 2000

SELECT * FROM tblTask WHERE
[Status]=4 
AND [tblTask].[Sign1By] <>'' 
AND [tblTask].[Sign2By] ='' 
AND EXISTS
(select 1
from func_split([tblTask].[UserSign]) t
INNER JOIN ( SELECT [tblUsers].[Sign] FROM [tblUsers],[tblWorkgroups] 
WHERE [tblUsers].[GroupId]=[tblWorkgroups].[Id] AND [tblWorkgroups].[Name]='Service' ) s
on t.sign = s.sign)

Kör jag endast funktionen enligt:

select * from dbo.func_split('HL;MN;JN')

Så returnerar den:

Sign
----
HL
MN
JN

Någon som har någon bra idé

Mvh
Henrik
:)

@ndersMedlem sedan juni 200032 969 inlägg
#2

På vilket sätt funkar det inte då?

devotionMedlem sedan jan. 20013 582 inlägg
#3

Jag får felmeddelande enligt:

Server: Msg 170, Level 15, State 1, Line 7
Line 7: Incorrect syntax near 'tblTask'.
Server: Msg 170, Level 15, State 1, Line 9
Line 9: Incorrect syntax near 's'.

Mvh
Henrik

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Hm, blir det någon skillnad med

SELECT * FROM tblTask WHERE
[Status]=4 
AND [tblTask].[Sign1By] <>'' 
AND [tblTask].[Sign2By] ='' 
AND EXISTS
(select 1
from func_split([tblTask].[UserSign]) t
INNER JOIN tblusers u on t.sign = u.sign 
inner join tblworkgroups g on u.groupid = g.id
where g.name = 'service' )
devotionMedlem sedan jan. 20013 582 inlägg
#5

Nä.... :(

Server: Msg 170, Level 15, State 1, Line 7
Line 7: Incorrect syntax near 'tblTask'.

Jag begriper inte varför...

//Henrik

devotionMedlem sedan jan. 20013 582 inlägg
#6

Jag testade även att bara köra subqueryn, men med samma resultat:

select 1
from func_split([tblTask].[UserSign]) t
INNER JOIN tblusers u on t.sign = u.sign 
inner join tblworkgroups g on u.groupid = g.id
where g.name = 'service'

Inga fler idéer?

:)

Mvh
Henrik

Peter SMedlem sedan dec. 20025 483 inlägg
#7

Det är för att tblTask inte länkas in någonstans (den vet alltså inte vad det är för någonting). Vi skulle behöva ha ett alias för tblTask i den första SELECTen.

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#8

kanske är ute och cyklar.. men om du skulle plocka ut några usersigns som uppfyller kraven för att subqueryn skall returnera önskat värde.

Pröva att ersätta [tblTask].[UserSign], med dem. Och se vad som händer.

devotionMedlem sedan jan. 20013 582 inlägg
#9

Peter S skrev:

Det är för att tblTask inte länkas in någonstans (den vet alltså inte vad det är för någonting). Vi skulle behöva ha ett alias för tblTask i den första SELECTen.

Men, varför funkar det i SQL 2005? :)

Mvh
Henrik

Peter SMedlem sedan dec. 20025 483 inlägg
#10

Min första mening avser det fall där du körde enbart subselecten. Min andra mening var nog mer generellt :)

devotionMedlem sedan jan. 20013 582 inlägg
#11

Fredde Mannen skrev:

kanske är ute och cyklar.. men om du skulle plocka ut några usersigns som uppfyller kraven för att subqueryn skall returnera önskat värde.

Pröva att ersätta [tblTask].[UserSign], med dem. Och se vad som händer.

Hej :)

Om jag gör det, så slipper jag felmeddelandet!

Testade även att ändra:

from func_split([tblTask].[UserSign]) t

Till:

from func_split('[tblTask].[UserSign]') t

Dvs lägga till fnuttar. Då blir det heller inget felmeddelande... :)

Jag testade även:

SELECT * FROM tblTask WHERE
[Status]=4 
AND [tblTask].[Sign1By] ='' 
AND EXISTS
(select 1
from func_split('STJO') t
INNER JOIN ( SELECT [tblUsers].[Sign] FROM [tblUsers],[tblWorkgroups] 
WHERE [tblUsers].[GroupId]=[tblWorkgroups].[Id] AND [tblWorkgroups].[Name]='Kyla Helsingborg' ) s
on t.[sign] = s.[sign])

Som inte ger felmeddelande. UserSign STJO, ingår i arbetsgruppen 'Kyla Helsingborg', så det är rätt. Dock så listas poster med andra användarsignaturer.

Tex

2009-03-08 00:00:00.000 0.0 HERY
2009-04-06 10:54:41.000 0.0 HERY
2009-02-02 10:00:00.000 0.0 ALHO
2009-02-02 13:00:00.000 0.0 ALHO

Dessa ingår inte i ovan nämnda arbetsgrupp...

Mvh
Henrik

Peter SMedlem sedan dec. 20025 483 inlägg
#12

Det är för att du använder ett statiskt värde (STJO) istället för tblTask.UserSign, så det är inte konstigt.

devotionMedlem sedan jan. 20013 582 inlägg
#13

Peter S skrev:

Det är för att du använder ett statiskt värde (STJO) istället för tblTask.UserSign, så det är inte konstigt.

Det konstiga, är att det inte fungerar i 2000.... :)

Peter SMedlem sedan dec. 20025 483 inlägg
#14

Enligt http://www.dbforums.com/microsoft-sql-server/999192-multi-statement-table-valued-functions.html#post3682648 fungerar det inte att i SQL2k skicka ett fältnamn som argument. Variabler och statiska värden fungerar däremot.

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#15

Peter S skrev:

Enligt http://www.dbforums.com/microsoft-sql-server/999192-multi-statement-table-valued-functions.html#post3682648 fungerar det inte att i SQL2k skicka ett fältnamn som argument. Variabler och statiska värden fungerar däremot.

Det var dit jag var påväg.. :)

devotionMedlem sedan jan. 20013 582 inlägg
#16

Peter S skrev:

Enligt http://www.dbforums.com/microsoft-sql-server/999192-multi-statement-table-valued-functions.html#post3682648 fungerar det inte att i SQL2k skicka ett fältnamn som argument. Variabler och statiska värden fungerar däremot.

Hmmm, då är det kört, med 2000....

Bra att veta ialla fall!

:)

Mvh
Henrik

134 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)