---
title: "problem med SP"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/46528-problem-med-sp"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "hakan@4u2.se"
published: "2002-06-24T14:42:26.000Z"
updated: "2002-06-24T20:14:59.000Z"
replies: 4
views: 182
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/46528-problem-med-sp"
---

# problem med SP

## #1 — hakan@4u2.se, 2002-06-24T14:42Z

Om jag vill göra en SP och skicka in värden i @nysql samt @nysql2 då fungerar det inte i kod1 

@nysql2 = t3.fraga1 like '%,1,%'
@nysql =   t2.fraga1 like '%,1,%'

Får felmeddelandet 
	"Incorrect syntax near ')'"
	"Incorrect syntax near keyword 'Group'

I kod2 har jag redan lagt in värdena direkt, då fungerar det!

Någon som vet vad jag gör för fel?

Tack på förhand

Kod1 fungerar inte

```
CREATE procedure dbo.Test
@nysql nvarchar(512),
@nysql2 nvarchar(512)

as

SELECT t1.typ_av_fraga,t1.antal_knappar, 

  (SELECT SUM(svar) FROM svar t2 INNER JOIN deltagare_ny ON   t2.deltagare_id = deltagare_ny.deltagare_id WHERE fraga_nummer = t1.id and @nysql) AS fldSumma, 

(SELECT COUNT(DISTINCT t3.deltagare_id) FROM svar t3 INNER JOIN deltagare_ny ON t3.deltagare_id = deltagare_ny.deltagare_id WHERE @nysql2 GROUP BY fraga_nummer HAVING fraga_nummer = t1.id) AS fldAntal_Deltagare

, t1.id, TEXT_fragor.fraga_text, t1.fraga_nummer FROM fragor t1 INNER JOIN TEXT_fragor ON t1.id = TEXT_fragor.fraga_id INNER JOIN kampanj ON t1.kampanj_id = kampanj.kampanj_id 
GO
```

Kod2 fungerar 

```
CREATE procedure dbo.test2

as

SELECT t1.typ_av_fraga,t1.antal_knappar, 

  (SELECT SUM(svar) FROM svar t2 INNER JOIN deltagare_ny ON   t2.deltagare_id = deltagare_ny.deltagare_id WHERE fraga_nummer = t1.id and t3.fraga1 like '%,1,%') AS fldSumma, 

(SELECT COUNT(DISTINCT t3.deltagare_id) FROM svar t3 INNER JOIN deltagare_ny ON t3.deltagare_id = deltagare_ny.deltagare_id WHERE t2.fraga1 like '%,1,%' GROUP BY fraga_nummer HAVING fraga_nummer = t1.id) AS fldAntal_Deltagare

, t1.id, TEXT_fragor.fraga_text, t1.fraga_nummer FROM fragor t1 INNER JOIN TEXT_fragor ON t1.id = TEXT_fragor.fraga_id INNER JOIN kampanj ON t1.kampanj_id = kampanj.kampanj_id 
GO
```

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

## #2 — LarsG, 2002-06-24T14:53Z

Om du vill skicka kolumnnamn och sökoperator i parametrar så måste du använda dynamisk sql, dvs du bygger ihop en sträng som du gör exec på. 

declare @st varchar(4000)
set @st = 'kod ' + @nysql + 'mer kod ' + @nysql2 + 'ännu mer kod '
exec(@st)

Det är inte speciellt bra för prestandan. Kan du inte skriva om det så att du bara skickar sökvärdet

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

## #3 — hakan@4u2.se, 2002-06-24T15:35Z

Problemet är att @nysql är dynamisk uppbyggt i ASP så jag vet inte innan hur många värden den kommer att innehålla. Hur kan jag lösa det, att bara skicka in sökvärden verkar omöjligt eller?

Ett exempel på nysql!!

```
 
@nysql = 
((deltagare_ny.fraga1 LIKE '%,1,%' OR
                                                   deltagare_ny.fraga1 LIKE '%,2,%' OR
                                                   deltagare_ny.fraga1 LIKE '%,3,%' OR
                                                   deltagare_ny.fraga1 LIKE '%,4,%' OR
                                                   deltagare_ny.fraga1 LIKE '%,5,%') AND (deltagare_ny.fraga2 LIKE '%,1,%' OR
                                                   deltagare_ny.fraga2 LIKE '%,2,%' OR
                                                   deltagare_ny.fraga2 LIKE '%,3,%' OR
                                                   deltagare_ny.fraga2 LIKE '%,4,%' OR
                                                   deltagare_ny.fraga2 LIKE '%,5,%') AND (deltagare_ny.fraga3 LIKE '%,1,%' OR
                                                   deltagare_ny.fraga3 LIKE '%,2,%' OR
                                                   deltagare_ny.fraga3 LIKE '%,3,%') AND (deltagare_ny.fraga4 LIKE '%,1,%' OR
                                                   deltagare_ny.fraga4 LIKE '%,2,%' OR
                                                   deltagare_ny.fraga4 LIKE '%,3,%' OR
                                                   deltagare_ny.fraga4 LIKE '%,4,%' OR
                                                   deltagare_ny.fraga4 LIKE '%,5,%') AND (deltagare_ny.fraga5 LIKE '%,1,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,2,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,3,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,4,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,5,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,6,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,7,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,8,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,9,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,10,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,11,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,12,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,13,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,14,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,15,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,16,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,17,%' OR
                                                   deltagare_ny.fraga5 LIKE '%,18,%') AND (deltagare_ny.fraga6 LIKE '%,1,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,2,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,3,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,4,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,5,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,6,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,7,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,8,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,9,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,10,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,11,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,12,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,13,%' OR
                                                   deltagare_ny.fraga6 LIKE '%,14,%') AND (deltagare_ny.fraga7 LIKE '%,1,%' OR
                                                   deltagare_ny.fraga7 LIKE '%,2,%' OR
                                                   deltagare_ny.fraga7 LIKE '%,3,%' OR
                                                   deltagare_ny.fraga7 LIKE '%,4,%'))
```

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

## #4 — LarsG, 2002-06-24T17:53Z

Jaha, då får det bli dynamiskt då

```

CREATE procedure dbo.Test
@nysql nvarchar(512),
@nysql2 nvarchar(512)

as
declare @st varchar(2000)

set @st = 'SELECT t1.typ_av_fraga,t1.antal_knappar, ' +
'(SELECT SUM(svar) FROM svar t2 INNER JOIN deltagare_ny ON ' +
' t2.deltagare_id = deltagare_ny.deltagare_id ' +
' WHERE fraga_nummer = t1.id and ' + @nysql + ') AS fldSumma, ' +
'(SELECT COUNT(DISTINCT t3.deltagare_id) ' +
' FROM svar t3 INNER JOIN deltagare_ny ' +
' ON t3.deltagare_id = deltagare_ny.deltagare_id ' +
' WHERE ' + @nysql2 + 
' GROUP BY fraga_nummer HAVING fraga_nummer = t1.id) AS fldAntal_Deltagare, ' +
' t1.id, TEXT_fragor.fraga_text, t1.fraga_nummer ' +
' FROM fragor t1 INNER JOIN TEXT_fragor ' +
' ON t1.id = TEXT_fragor.fraga_id INNER JOIN kampanj ' +
' ON t1.kampanj_id = kampanj.kampanj_id '
exec(@st)
GO
```

Du kan testa att du får rätt sql-sats genom att lägga till

```
print @st
```

innan exec

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

## #5 — hakan@4u2.se, 2002-06-24T20:14Z

Fungerar Tack LarsG!

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/46528-problem-med-sp
