---
title: "User-defined function enormt seg ibland."
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/161453-user-defined-function-enormt-seg-ibland"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Fredde Mannen"
published: "2007-06-13T09:20:02.000Z"
updated: "2007-06-13T09:20:02.000Z"
replies: 0
views: 244
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/161453-user-defined-function-enormt-seg-ibland"
---

# User-defined function enormt seg ibland.

## #1 — Fredde Mannen, 2007-06-13T09:20Z

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?!

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/161453-user-defined-function-enormt-seg-ibland
