Hai alcune domande diverse qui.
D: Cosa sono le funzioni SQL standard ANSI?
Le funzioni standard ANSI sono cose come AVG, COUNT, MIN, MAX. Sono coperti dallo standard ANSI del 1992 , ma è un diavolo di una lettura secca e noiosa.
D: Le funzioni SQL standard ANSI modificano i dati nel database?
No. Puoi usarli per modificare i dati - ad esempio, posso dire:
INSERT INTO dbo.MyReport SELECT MAX(SalespersonRevenue) FROM dbo.Sales
Ma da soli, solo l'uso di un AVG, COUNT, MIN, MAX, ecc. Non dovrebbe modificare i dati in modo permanente all'interno del database.
D: Lo standard ANSI mi consente di scrivere le mie funzioni?
Sì, ma l'implementazione esatta varia da fornitore a fornitore. Le funzioni che scrivi possono essere conformi allo standard del linguaggio ANSI, ma ciò che fai all'interno della tua funzione può essere terribilmente terribile, come creare effetti collaterali.
- Quando si discute del comportamento previsto , è possibile ottenere una risposta multipiattaforma.
- Quando si parla di effetti collaterali , non lo è.
D: Posso creare la mia funzione per scrivere dati?
Perché sicuro, se sei creativo. Sono un ragazzo di Microsoft SQL Server, quindi mi concentrerò su quella piattaforma. La pagina delle funzioni di Books Online dice:
Le funzioni definite dall'utente non possono essere utilizzate per eseguire azioni che modificano lo stato del database.
A cui dico:
Non sei il mio vero papà.
Quindi ecco come infrangerei le regole. Attenzione: seguono idee pessime.
- Nella tua funzione, esegui una query su una nuova tabella creata appositamente per questo scopo malvagio, quindi crea qualcosa che controlla la tabella per le istruzioni selezionate e quindi attiva un'azione (Eventi estesi, controllo o traccia di Profiler). È possibile collegare un tipo di aggeggio Rube Goldberg per eseguire lavori basati su tali istruzioni selezionate.
- Nella funzione, chiama il codice CLR - diamine, puoi persino chiamare un servizio web . Quel servizio web potrebbe benissimo riportare i dati nel tuo database.
- Nella funzione, chiama xp_cmdshell e fai qualcosa tramite il prompt dei comandi. (HT @AaronBertrand nei commenti.)
Tutti questi esempi presentano enormi svantaggi sotto forma di prestazioni e coerenza transazionale. Hai appena chiesto se teoricamente si potesse fare, e la risposta è sì. Non userei mai nessuno dei due nel mio codice - farei un passo indietro e chiederò: "Qual è l'obiettivo aziendale che sto cercando di raggiungere qui, e c'è un modo per farlo per ottenere prestazioni e coerenza transazionale ?" Se desideri consigli specifici su questi, farei una domanda Stack separata con specifiche.