webForumDet fria alternativet

SP: exec wheresats

Databaser & SQL

2 svar · 280 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#1

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

Medlem sedan dec. 200012 464 inlägg
#2
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(...)
Medlem sedan dec. 19998 577 inlägg
#3

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

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)