VideMedlem sedan dec. 19996 094 inlägg
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
LarsGMedlem sedan dec. 200012 465 inlägg
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(...)
VideMedlem sedan dec. 19996 094 inlägg
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