![]() |
Re: Datum zu KW mittels SQL
Das mit dem User dbo verstehe ich nicht.
|
Re: Datum zu KW mittels SQL
Die Funktion wurde ja explizit im Schema "dbo" angelegt, d.h. es "gehört" allen Nutzern, die der Rolle "DB-Owner" angehören (hoffentlich schreib ich jetzt nicht zuviel Quatsch). Entgegen meiner vorherigen Aussage gibt es den "Nutzer" dbo AFAIK gar nicht, sondern das ist eine Art Alias auf den DB-Owner. Sollte das alles so nicht richtig sein, bitte ich um Richtigstellung durch einen MS-SQL-Kundigen.
|
Re: Datum zu KW mittels SQL
danke
|
Re: Datum zu KW mittels SQL
Ich habe in diesem Zusammenhang ein neues Problem.
Diese Abfrage funktioniert:
SQL-Code:
Die folgende Abfrage erzeugt die Fehlermeldung:
select dbo.fn_ISOweek(Datum)
from Tabelle where year(Datum) = year(GetDate) and month(Datum) = month(GetDate())
SQL-Code:
Warum wird bei "<" und "=" ein Unterschied gemacht, der zu dieser Fehlermeldung führt?
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) = year(GetDate) and month(Datum) < month(GetDate()) |
Re: Datum zu KW mittels SQL
Hallo,
laut Fehlermeldung ist das Problem in der Zeile 18 der Funktion fn_ISOWeek zu suchen. Die Abfrage auf < könnte eventuell auch Zeilen finden, in denen Datum Null ist und dies könnte Deine Funktion in die Pedrullie bringen. Probiere es mal mit
SQL-Code:
Ändere Deine Funktion ggfls. so, dass sie auch mit Null-Werten umgehen kann.
select dbo.fn_ISOweek(Datum)
from Tabelle where year(Datum) = year(GetDate) and month(IsNull(Datum,'01.01.1900')) < month(GetDate()) PS: Das ist jetzt nur 'ne Vermutung. |
Re: Datum zu KW mittels SQL
Nein, ich habe gerade geprüft, NULL-Werte gibt es nicht.
|
Re: Datum zu KW mittels SQL
Hallo,
zeig' uns bitte mal die ganze Funktion, so dass man sehen kann was in Zeile 18 passiert und wo da eventuell ein Fehler liegen könnte. Tritt der Fehler auch bei > oder <> oder <= oder >= auf? Sind überall ein gültige Datumswerte enthalten? |
Re: Datum zu KW mittels SQL
Irgendwas muss mit den Daten nicht stimmen!
Am "=" oder "<" liegt es nicht.
SQL-Code:
Irgendwo müssen in meinen Daten aus 2009 ein Fehler sein. Wie kann ich das feststellen?
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
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 |
Re: Datum zu KW mittels SQL
SQL-Code:
Zeigt mir etwa 7000 Sätze an, optisch kann dabei aber nicht feststellen ob ein Fehler vorliegt.
select Datum
from Tabelle where year(Datum) = 2009 |
Re: Datum zu KW mittels SQL
Hallo,
Zitat:
kannst Du aus dieser Zeile
SQL-Code:
irgendwie @DATE2 ausgeben?
EXEC @ISOWeek = ISOWeek @DATE2
Notfalls vor dem Exec in eine Tabelle schreiben. So nach dem Motto:
SQL-Code:
Dieser Tabelle einen Datensatz gönnen:
create table pruefmalwas (Datum Varchar(200));
SQL-Code:
Deine Funktion vor dem EXEC um ein
Insert into pruefmalwas values ('01.01.1900');
SQL-Code:
ergänzen.
Update pruefmalwas set Datum = @DATE2;
Dann sollte in der Tabelle der Wert stehen, der zu dem Fehler führt. Eventuell musst da aber noch ein Commit gemacht werden. Der Fehler muss in den 2009er Daten liegen, sind das viele Daten oder kannst Du die auch von Hand überprüfen? Ansonsten:
SQL-Code:
und das dann für alle Monate, bis es kracht und dann notfalls auch noch für den betreffenden Monat für alle Tage.
select dbo.fn_ISOweek(Datum)
from Tabelle where year(Datum) = 2008 and month(Datum) = 1 Monate könntest Du auch mit < 7 anfangen, wenn kein Fehler > 6 und so an den Fehler herantasten. Welchen Datentyp hat Datum in der Datenbank? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz