2010-07-02 8 views
19

Ich habe einen komplexen Ausdruck, der einen Wert aus einem Datum berechnet, das ich für mehrere Datumsspalten verwenden muss.
Kann ich eine temporäre lokale Funktion in meiner Abfrage definieren, um das Kopieren und Einfügen dieses Ausdrucks zu vermeiden. ?Ist es möglich, eine lokale Funktion in einer TSQL-Abfrage zu definieren?

mag:

create MyLocalFunc(@ADate datetime) 
returns int as 
begin 
    blablabla 
end 

select 
    MyLocalFunc(col1), col2, MyLocalFunc(col3), col4, MyLocalFunc(col5) 
from 
    mytable 

Als Abhilfe können, ich weiß, ich ein CREATE FUNCTION // DROP FUNCTION tun kann, aber ich würde es vorziehen, zu vermeiden.

+0

Siehe: http://stackoverflow.com/questions/981451/can-i-create-a-one-time-use-function-in-a-script- or-stored-procedure – Weasle

Antwort

6

Nein, es gibt keine Möglichkeit - create/drop ist die einzige Wahl.

+0

Diese Antwort erwähnt eine Möglichkeit, in der es möglich ist: http://stackoverflow.com/a/981461/750216 –

0

Nein, nicht lokal. Sie können jedoch eine benutzerdefinierte Funktion in der Datenbank erstellen, die nicht auf Daten zugreifen muss, um die Berechnung durchzuführen.

Warum nicht eine dauerhafte UDF machen?

1

SQL Server unterstützt anonymous blocks, indem die Abfrage (n) in einen BEGIN/END-Block gestellt wird, aber ich konnte kein Beispiel finden, in dem jemand eine Funktion definiert hat. Oracle hatte die Funktionalität für eine Weile ...

+0

Können Sie mehr über anonyme Blöcke in SQL Server erklären? Diese Verbindung ist gebrochen und ich kann nichts selbst finden. –

Verwandte Themen