Irgendwas muss mit den Daten nicht stimmen!
Am "=" oder "<" liegt es nicht.
SQL-Code:
select dbo.fn_ISOweek(Datum)
from Tabelle
where year(Datum) = 2009
-- Resultat ist die Fehlermeldung:
Server: Msg 557, Level 16, State 2, Procedure fn_ISOweek, Line 18
Only functions and extended stored procedures can be executed from within a function.
select dbo.fn_ISOweek(Datum)
from Tabelle
where year(Datum) = 2008
-- Resultat ist keine Fehlermeldung
Irgendwo müssen in meinen Daten aus 2009 ein Fehler sein. Wie kann ich das feststellen?
SQL-Code:
CREATE FUNCTION dbo.fn_ISOweek (
@DATE
datetime
)
RETURNS
int
AS
BEGIN
DECLARE @ISOweek
int
SET @ISOweek = DATEPART(wk, @DATE) + 1 -
DATEPART(wk, CAST( DATEPART( yy, @DATE )
AS CHAR(4) ) + '
0104' )
--Jan 1-3 may belong to the previous year
IF ( @ISOweek = 0 )
BEGIN
DECLARE @Date2
datetime
SET @DATE2 = CAST( DATEPART( yy, @DATE ) - 1
AS CHAR(4) ) +
'
12' + CAST( 24 + DATEPART( DAY, @DATE )
AS CHAR(2) )
-- rekursiver Aufruf:
EXEC @ISOWeek = ISOWeek @DATE2 <
-- Zeile 18
SET @ISOWeek = @ISOWeek + 1
END
--Dec 29-31 may belong to the next year
IF ( ( DATEPART( mm, @DATE ) = 12 )
AND
( ( DATEPART( dd, @DATE ) - DATEPART( dw, @DATE) ) >= 28 ) )
SET @ISOweek=1
RETURN(@ISOweek)
END