---
title: "SP: exec wheresats"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/142952-sp-exec-wheresats"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Vide"
published: "2006-02-23T16:07:42.000Z"
updated: "2006-02-24T09:53:02.000Z"
replies: 2
views: 288
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/142952-sp-exec-wheresats"
---

# SP: exec wheresats

## #1 — Vide, 2006-02-23T16:07Z

Hejsan,

Jag har två SP:s, den ena anropar den andra. Tanken är att den första skall få en wheresats som skall användas i den andra SP:n.

SP1:

```
CREATE PROCEDURE [dbo].[getAggregateLineValue]
@intDiagramID int,
@intLineID int
AS
declare @WhereStatement as varchar
exec @WhereStatement = getAggregateLineWhereStatement @intDiagramID, @intLineID
exec('select count(*) from p5714_data2 where ' + @WhereStatement )
```

SP2:

```
CREATE PROCEDURE [dbo].[getAggregateLineWhereStatement]
@intDiagramID int,
@intLineID int
AS
select sqlexpression from p5714_aggregate_diagram_v where diagramid=@intDiagramID and lineid=@intLineID
```

Detta fungerar inte då den tycker att @WhereStatement är 0 när den skall användas.

Vad gör jag för fel?

Mvh, Vide

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

## #2 — LarsG, 2006-02-23T16:29Z

```
declare @WhereStatement as varchar
```

Om du inte  anger någon längd så är default 1.

```
exec @WhereStatement = getAggregateLineWhereStatement
```

innebär att du tilldelar returvärdet från proceduren, eftersom du inte har någon return så blir det 0. Du kan inte få värdet av en select i en procedur till en variabel i en annan procedur. Skriv en funktion i stället

```
create function X(...)
returns varchar(...)
return (select ... )
```

och i den andra proceduren

```
set @WhereStatement = dbo.x(...)
```

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

## #3 — Vide, 2006-02-24T09:53Z

Tackar det fungerade fint!

Nästa problem blir att jag vill ha en kontroll på att funktionen verkligen hittade något, om inte så skall den returnera -1:

```
create function dbo.getAggregateLineWhereStatement( @intDiagramID int, @intLineID int )
returns varchar(250)
begin
if exists ( select sqlexpression from p5714_aggregate_diagram_v where diagramid=@intDiagramID and lineid=@intLineID )
return( select sqlexpression from p5714_aggregate_diagram_v where diagramid=@intDiagramID and lineid=@intLineID )
else
return( '-1' )
```

Detta ger fel på sista raden att "incorrect syntax near ')'"

Mvh, Vide

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/142952-sp-exec-wheresats
