Czy w SQL Server 2005 istnieje koncepcja jednorazowej lub lokalnej funkcji zadeklarowanej w skrypcie SQL lub procedurze składowanej? Chciałbym odrzucić pewną złożoność skryptu, który piszę, ale wymagałoby to możliwości zadeklarowania funkcji.
Po prostu ciekawy.
sql
sql-server
sql-server-2005
tsql
scripting
Mark Carpenter
źródło
źródło
Odpowiedzi:
Możesz zadzwonić
CREATE Function
pod koniec skryptu iDROP Function
pod koniec.źródło
Możesz tworzyć tymczasowe procedury składowane, takie jak:
w skrypcie SQL, ale nie funkcje. Mógłbyś jednak zapisać wynik w tabeli tymczasowej, a następnie użyć tych informacji później w skrypcie.
źródło
BEGIN
słowo kluczowe i zastąpię jeEND
słowem kluczowymGO
.Wspólne wyrażenia tabelowe pozwalają zdefiniować, które zasadniczo są widokami, które trwają tylko w zakresie instrukcji select, insert, update i delete. W zależności od tego, co musisz zrobić, mogą być strasznie przydatne.
źródło
Wiem, że mogę zostać skrytykowany za sugerowanie dynamicznego SQL, ale czasami jest to dobre rozwiązanie. Upewnij się tylko, że rozumiesz konsekwencje dla bezpieczeństwa, zanim się nad tym zastanowisz.
źródło
W skryptach masz więcej opcji i lepsze podejście do racjonalnego rozkładu. Zajrzyj do trybu SQLCMD (Menu zapytań -> tryb SQLCMD), a konkretnie do poleceń: setvar i: r.
W ramach procedury składowanej opcje są bardzo ograniczone. Nie można utworzyć funkcji zdefiniowanej bezpośrednio w treści procedury. Najlepsze, co możesz zrobić, to coś takiego, z dynamicznym SQL:
To przybliża globalną funkcję tymczasową, jeśli taka istniała. Nadal jest widoczny dla innych użytkowników. Możesz dołączyć @@ SPID połączenia, aby ujednolicić nazwę, ale wtedy reszta procedury wymagałaby również używania dynamicznego SQL.
źródło
Poniżej przedstawiono to, czego użyłem w przeszłości, aby spełnić potrzebę skalarnego UDF w MS SQL:
To podejście, które wykorzystuje globalną zmienną dla PROCEDURY, umożliwia wykorzystanie tej funkcji nie tylko w skryptach, ale także w przypadku potrzeb związanych z dynamicznym SQL.
źródło