Udostępnij za pośrednictwem


Wytyczne projekt funkcja zdefiniowana przez użytkownika

funkcja zdefiniowanej przez użytkownika są przechowywane w postaci obiektu bazy danych, zapewniając kod wielokrotnego użytku, które mogą być używane w następujący sposób:

  • W Transact-SQL Instrukcje takie jak SELECT

  • W aplikacjach wywołujących funkcja

  • W definicji innego funkcja zdefiniowanej przez użytkownika

  • Aby parameterize widoku lub poprawić funkcji widok indeksowany

  • Aby zdefiniować kolumna do tabela

  • Aby zdefiniować ograniczenie typu CHECK dla kolumna

  • Aby zastąpić procedura przechowywana

Wybierając typ funkcja

Podczas projektowania funkcja zdefiniowanej przez użytkownika, należy najpierw określić typ funkcja dostosowane do potrzeb użytkownika.Spowoduje to funkcja:

  • Zwraca wartość skalarna (pojedyncza wartość)

  • Zwrotu tabela (wielu wierszy)

  • Wykonywanie złożonych obliczeń

  • Przede wszystkim dostępu SQL Server dane

Funkcje zdefiniowane przez użytkownika zapisany przy użyciu jednego Transact-SQL lub .NET Framework można przywrócić obu wartość skalarna i tabela wartości.

Właściwości funkcje

Istnieje kilka właściwości funkcja zdefiniowanych przez użytkownika, które określają zdolność SQL Server Database Engine Indeksowanie wyniki funkcja, za pomocą indeksów dla kolumny obliczane, które wywołują funkcja lub za pomocą widoków indeksowanych, które odwołują się do funkcja. Właściwości te mają również zastosowanie do metody Środowisko CLR Typy definiowane przez użytkownika.

Determinism

Deterministyczny zawsze zwracają ten sam wynik dowolnej czas wywołaniach z określonym zestaw wartości wejściowych i podać ten sam stanu bazy danych.Nondeterministic funkcji może zwracać różne wyniki są nazywane z określonym zestaw wartości wejściowych nawet wtedy, gdy stan bazy danych, które mają dostęp tylko do tych pozostaje bez zmian.

The Database Engine automatically analyzes the body of Transact-SQL functions and evaluates whether the funkcja is deterministic. Na przykład, jeśli inne funkcje, które są inne niż deterministyczny wywołuje funkcję lub jeśli funkcja wywołuje rozszerzonych procedur przechowywanych, a następnie Database Engine oznacza tę funkcję, co inne niż deterministyczny. Do typowych funkcja środowiska wykonawczego (CLR) języka Database Engine zależy od autora funkcja do oznaczenia funkcja jako deterministyczny lub nie stosując SqlFunction atrybut niestandardowego.

Precyzja

funkcja zdefiniowanej przez użytkownika jest nazywany dokładny, jeśli go nie pociąga za sobą żadnych zmiennoprzecinkowe punkt operacji.

The Database Engine automatically analyzes the body of Transact-SQL functions and evaluates whether the funkcja is precise. Do funkcja środowiska CLR Database Engine zależy od autora funkcja do oznaczenia funkcja jako dokładne lub nie stosując SqlFunction atrybut niestandardowego.

Dostęp do danych

Właściwość ta wskazuje, czy funkcja uzyskuje dostęp do lokalnej bazy danych serwera używany SQL Server Dostawca zarządzany w procesie. Aby uzyskać więcej informacji zobaczDostęp do danych z CLR obiektów bazy danych.

The Database Engine automatically analyzes the body of Transact-SQL functions and evaluates whether the funkcja performs data access. Do funkcja środowiska CLR Database Engine zależy od autora funkcja do wskazania właściwości dostępu danych przy użyciu SqlFunction atrybut niestandardowego.Ta właściwość jest wymuszana na wykonanie czas przez Database Engine. Jeśli funkcja ta wskazuje, że DataAccess = Brak, ale wykonuje dostępu do danych, Niepowodzenie funkcji w wykonanie czas.

Dostęp do danych systemowych

Właściwość ta wskazuje, czy funkcja uzyskuje dostęp do metadane systemu w lokalnej bazie danych serwera używany SQL Server Dostawca zarządzany w procesie.

The Database Engine automatically analyzes the body of Transact-SQL functions and evaluates whether the funkcja performs system data access. Do funkcja środowiska CLR Database Engine zależy od autora funkcja oznacza system właściwości dostępu danych przy użyciu SqlFunction atrybut niestandardowego.Ta właściwość jest wymuszana na wykonanie czas przez Database Engine. Jeśli funkcja ta wskazuje, że SystemDataAccess = Brak, ale wykonuje dostępu do danych systemu, kończy się niepowodzeniem funkcję w czasie wykonywania.

IsSystemVerified

Właściwość ta wskazuje, czy właściwości determinism i dokładności funkcja są do sprawdzenia przez Database Engine. Ta właściwość ma wartość true dla Transact-SQL działa tak długo, jak nie wymagają żadnych funkcji, oznaczonych IsSystemVerified = false.Właściwość ma wartość false dla funkcji środowiska CLR.

The Database Engine automatically derives the IsSystemVerified właściwość for functions.Dla Transact-SQL Funkcje, jeśli ich dostęp do wszystkich funkcji, która jest oznaczona jako IsSystemVerified = false, wówczas funkcja ta sama jest oznaczony jako IsSystemVerified = false.

Aby uzyskać więcej informacji na temat funkcji w indeksowanych kolumny obliczane i widoki indeksowane zobacz Tworzenie indeksów na kolumny obliczane, a Tworzenie indeksowanych widoki.