Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Aggiorna i dati tramite una funzione con valori di tabella in SQL Server

In SQL Server è possibile aggiornare i dati tramite una funzione con valori di tabella.

Quello che voglio dire è che puoi aggiornare i dati nelle tabelle sottostanti che la funzione interroga.

Ad esempio, se la tua funzione restituisce il nome di qualcuno da una tabella, puoi aggiornare il suo nome eseguendo un UPDATE istruzione contro la funzione anziché la tabella.

Si noti che questo funziona solo su funzioni con valori di tabella in linea (ITVF). Per quanto ne so, non funzionerà su funzioni con valori di tabella multi-istruzione (MSTVF).

Inoltre, le colonne che aggiorni dovranno essere colonne valide nella query della funzione.

Esempio 1 – Funzione di esempio

Ecco una rapida funzione che seleziona i dati di base da una tabella.

CREATE FUNCTION udf_GetScore_ITVF( @Player varchar(255))
    RETURNS TABLE
AS
RETURN (
    SELECT Score
    FROM dbo.Scoreboard
    WHERE Player = @Player
    );
GO

Questa funzione seleziona semplicemente il punteggio per un determinato giocatore.

Potrei usare questa funzione per aggiornare il punteggio di un giocatore.

Mi rendo conto che in genere restituiresti più di una colonna quando usi una funzione con valori di tabella, ma voglio mantenere questo esempio semplice a scopo dimostrativo.

Esempio 2:aggiornamento dei dati tramite la funzione

Ecco un esempio di aggiornamento del punteggio del giocatore.

Per prima cosa, vediamo qual è il punteggio attuale di quel giocatore.

SELECT * FROM udf_GetScore_ITVF('Homer');

Risultato:

+---------+
| Score   |
|---------|
| 1       |
+---------+

Quindi Homer ha un punteggio di 1.

Usiamo la funzione con valori di tabella per aumentarlo.

UPDATE udf_GetScore_ITVF('Homer') SET Score = 99999;

SELECT * FROM udf_GetScore_ITVF('Homer');

Risultato:

+---------+
| Score   |
|---------|
| 99999   |
+---------+

Quindi ho aumentato con successo il punteggio di Homer usando la funzione inline con valori di tabella.

Esempio 3 – Quando non funziona

Le colonne effettive che puoi aggiornare dipenderanno dalle colonne selezionate nella query. La mia query seleziona solo il Score colonna, quindi posso aggiornare solo i dati in quella colonna.

Ecco cosa succede se provo ad aggiornare i dati in un'altra colonna.

UPDATE udf_GetScore_ITVF('Homer') SET Player = 'Apu';

Risultato:

Msg 207, Level 16, State 1, Line 1
Invalid column name 'Player'.

Sappiamo che il tavolo ha un Player colonna (perché si trova nella WHERE clausola della funzione). Tuttavia, non è selezionato nella query e, pertanto, non è una colonna valida da aggiornare.