---
title: "Fråga funkar i SQL-Server 2005, men inte i SQL-Server 2000"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/177907-fråga-funkar-i-sql-server-2005-men-inte-i-sql-server-2000"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "devotion"
published: "2009-04-07T07:16:45.000Z"
updated: "2009-04-09T11:19:12.000Z"
replies: 15
views: 816
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/177907-fråga-funkar-i-sql-server-2005-men-inte-i-sql-server-2000"
---

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

## #1 — devotion, 2009-04-07T07:16Z

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
   :)

Permalänk: https://www.webforum.nu/p/177907

## #2 — @nders, 2009-04-07T07:18Z

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

Permalänk: https://www.webforum.nu/p/2178007

## #3 — devotion, 2009-04-07T07:39Z

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

Permalänk: https://www.webforum.nu/p/2178010

## #4 — Peter S, 2009-04-07T14:14Z

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' )
```

Permalänk: https://www.webforum.nu/p/2178039

## #5 — devotion, 2009-04-07T20:54Z

Nä.... :(   

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

Jag begriper inte varför...

//Henrik

Permalänk: https://www.webforum.nu/p/2178116

## #6 — devotion, 2009-04-08T07:03Z

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

Permalänk: https://www.webforum.nu/p/2178147

## #7 — Peter S, 2009-04-08T07:30Z

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.

Permalänk: https://www.webforum.nu/p/2178149

## #8 — Fredde Mannen, 2009-04-08T07:30Z

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.

Permalänk: https://www.webforum.nu/p/2178150

## #9 — devotion, 2009-04-08T10:28Z

> **[Peter S skrev:](https://www.webforum.nu/p/1463521)**
>
> 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

Permalänk: https://www.webforum.nu/p/2178164

## #10 — Peter S, 2009-04-08T10:56Z

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

Permalänk: https://www.webforum.nu/p/2178169

## #11 — devotion, 2009-04-08T18:37Z

> **[Fredde Mannen skrev:](https://www.webforum.nu/p/1463523)**
>
> 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

Permalänk: https://www.webforum.nu/p/2178216

## #12 — Peter S, 2009-04-09T06:10Z

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

Permalänk: https://www.webforum.nu/p/2178259

## #13 — devotion, 2009-04-09T07:01Z

> **[Peter S skrev:](https://www.webforum.nu/p/1463648)**
>
> 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....  :)

Permalänk: https://www.webforum.nu/p/2178268

## #14 — Peter S, 2009-04-09T08:07Z

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.

Permalänk: https://www.webforum.nu/p/2178273

## #15 — Fredde Mannen, 2009-04-09T08:21Z

> **[Peter S skrev:](https://www.webforum.nu/p/1463666)**
>
> 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.. :)

Permalänk: https://www.webforum.nu/p/2178274

## #16 — devotion, 2009-04-09T11:19Z

> **[Peter S skrev:](https://www.webforum.nu/p/1463666)**
>
> 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

Permalänk: https://www.webforum.nu/p/2178300

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/177907-fråga-funkar-i-sql-server-2005-men-inte-i-sql-server-2000
