Har skapat en User-defined scalar function som då innehåller en sql-sats som i vanliga fall smäller till så finns restultatet inom 1-2 sek. Men nu när jag skapat en funktion av den och vill använda den i en annan sql-sats, eller om jag bara testar att skriva ut resultatet
print dbo.CountAds(@CustomerId,@StartDate,@StopDate)
så tar det kring 20 sek.
Om jag använder den i en annan sql-sats likt denna
select customername, customerid, dbo.CountAds(customerid, @StartDate,@StopDate) as Antal from customers
så kan det ta mellan 20 sek till ja, tills jag inte orkar vänta längre.
Och det är ju tokigt alldeles för länge. Funktionen ser ut som följer (visas ur modifieringsläget
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: Fredrik Malmström
-- Create date: 20070613
-- Description: Beräknar antalet annonser under en viss period som underlag för fakturering
-- =============================================
ALTER FUNCTION [dbo].[CountAds]
(
-- Add the parameters for the function here
@CustomerID int, @StartDate datetime, @Stopdate datetime
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @Result int
-- SQL-sats för att returnera antalet annonser för import kunder som
-- skall vara underlag för fakturering
select @Result = (select sum(c.annonser) from (
select
(
select count(distinct custompropertyid) from properties where customer=a.Customer
and imported between @StartDate and @StopDate
) As annonser
from properties a
inner join
customers b on
a.Customer=b.customerid
where a.customer=@CustomerID
-- end
UNION
-- SQL-sats beräkna antal annonser för ej importerad kund som skall
-- vara underlag för fakturering.
select
(
(select count(*) from properties where customer=a.Customer
and deleted is null and imported is null)
+
(select count(propertyid) from properties where customer=a.Customer
and deleted between @StartDate and @StopDate and imported is null)
) As annonser
from properties a
inner join
customers b on
a.Customer=b.customerid
where a.Customer=@CustomerID
) as c)
-- Returnera antalet annonser under den angivna perioden.
RETURN @Result
END
beror det på hur jag skrivit sql-satsen i funktionen eller kan det bero på annat?!