Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wybierz dane za pomocą funkcji wartościującej tabelę w SQL Server

SELECT Instrukcja jest prawdopodobnie najczęściej używaną instrukcją w SQL Server. W większości przypadków instrukcja ta jest uruchamiana w widoku lub bezpośrednio w tabeli w celu pobrania wierszy danych tabelarycznych.

Ale widoki i tabele nie są jedynymi obiektami, które możesz uruchomić SELECT oświadczenie w sprawie. SELECT Instrukcja może być również używana w innych obiektach, takich jak funkcje zestawu wierszy, OPENXML i funkcje zdefiniowane przez użytkownika.

Ten artykuł zawiera przykład wybierania danych za pomocą funkcji z wartościami w tabeli.

Przykład 1 – Funkcja podstawowa

Oto szybka funkcja, która wybiera podstawowe dane z tabeli za pomocą wbudowanej funkcji o wartościach w tabeli.

SELECT * FROM udf_Cats_ITVF();

Wynik:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 1       | Garfield  | 9871237654 |
| 2       | Felix     | 8871237651 |
| 3       | Tom       | 7871237652 |
| 4       | Fetch     | 6871237653 |
+---------+-----------+------------+

Funkcja wygląda tak:

CREATE FUNCTION dbo.udf_Cats_ITVF()
    RETURNS TABLE
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    );
GO

Ta funkcja po prostu wybiera wszystkie wiersze z tabeli. Żadne argumenty nie są wymagane.

Jeśli chcesz wybrać konkretnego kota, musisz dodać WHERE klauzula.

SELECT * FROM udf_Cats_ITVF()
WHERE CatName = 'Fetch';

Wynik:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 4       | Fetch     | 6871237653 |
+---------+-----------+------------+

Teraz muszę przyznać, że ta funkcja jest trochę zbędna, ponieważ mogliśmy po prostu wybrać dane bezpośrednio z tabeli. Albo mogliśmy stworzyć widok, aby wykonać tę pracę. Jednak funkcje zdefiniowane przez użytkownika mają tę zaletę, że tabele i widoki nie mają:parametrów.

Przykład 2 – funkcja z parametrami

Jedną z zalet funkcji wycenianych w tabeli jest to, że obsługują one parametry. W tym miejscu funkcja staje się nieco bardziej użyteczna. Niektórzy odnoszą się do funkcji wartości w tabeli jako „widoków parametrycznych”, ponieważ zachowują się one jak widok, ale z dodatkową funkcjonalnością zezwalania na parametry.

Moglibyśmy więc stworzyć odmianę poprzedniej funkcji, aby zaakceptować argument dla imienia kota.

SELECT * FROM udf_CatsByName_ITVF('Fetch');

Wynik:

+---------+-----------+------------+
| CatId   | CatName   | Phone      |
|---------+-----------+------------|
| 4       | Fetch     | 6871237653 |
+---------+-----------+------------+

Nowa funkcja wygląda tak:

CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) )
    RETURNS TABLE
AS
RETURN (
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats
    WHERE CatName = @CatName
    );

GO

Przykład 3 – Połączenia

Funkcje wyceniane w tabeli mogą być zawarte w sprzężeniach.

Tutaj wybieram wszystkie kolumny z funkcji wartości w tabeli, która zwraca wszystkie albumy danego artysty:

SELECT * FROM ufn_AlbumsByArtist(1);

Wynik:

+------------+-------------------------+---------+
| ArtistId   | AlbumName               | Genre   |
|------------+-------------------------+---------|
| 1          | Powerslave              | Rock    |
| 1          | Somewhere in Time       | Rock    |
| 1          | Piece of Mind           | Rock    |
| 1          | Killers                 | Rock    |
| 1          | No Prayer for the Dying | Rock    |
+------------+-------------------------+---------+

Jedynym problemem z tą funkcją jest to, że nie zwraca ona nazwy wykonawcy. Jeśli chcę nazwisko wykonawcy, muszę połączyć je z tabelą zawierającą te dane. W tym przypadku tabela zawierająca nazwisko wykonawcy nazywa się Artists , więc mogę zmodyfikować moje zapytanie w następujący sposób:

SELECT  
    ar.ArtistName,
    aba.AlbumName,
    aba.Genre
FROM ufn_AlbumsByArtist(1) aba
INNER JOIN Artists ar
ON aba.ArtistId = ar.ArtistId;

Wynik:

+--------------+-------------------------+---------+
| ArtistName   | AlbumName               | Genre   |
|--------------+-------------------------+---------|
| Iron Maiden  | Powerslave              | Rock    |
| Iron Maiden  | Somewhere in Time       | Rock    |
| Iron Maiden  | Piece of Mind           | Rock    |
| Iron Maiden  | Killers                 | Rock    |
| Iron Maiden  | No Prayer for the Dying | Rock    |
+--------------+-------------------------+---------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 sposoby korzystania z ALL w SQL Server

  2. Wybierz grupę wierszy, które pasują do wszystkich pozycji na liście

  3. DAY() Przykłady w SQL Server (T-SQL)

  4. Czy INNER JOIN może zapewnić lepszą wydajność niż EXISTS?

  5. Zapytanie SQL Server Passthrough jako podstawa zestawu rekordów DAO w programie Access