Anda memiliki beberapa pertanyaan berbeda di sini.
T: Apa fungsi SQL standar ANSI?
Fungsi standar ANSI adalah hal-hal seperti AVG, COUNT, MIN, MAX. Mereka dicakup dalam standar ANSI 1992 , tetapi itu adalah heck yang membosankan dan membosankan.
T: Apakah fungsi SQL standar ANSI mengubah data dalam database?
Tidak. Anda dapat menggunakannya untuk mengubah data - misalnya, saya dapat mengatakan:
INSERT INTO dbo.MyReport SELECT MAX(SalespersonRevenue) FROM dbo.Sales
Tetapi dengan sendirinya, hanya penggunaan AVG, COUNT, MIN, MAX, dll yang seharusnya tidak mengubah data secara permanen di dalam basis data Anda.
T: Apakah standar ANSI memungkinkan saya untuk menulis fungsi saya sendiri?
Ya, tetapi implementasi yang tepat bervariasi dari vendor ke vendor. Fungsi yang Anda tulis mungkin sesuai dengan standar bahasa ANSI, tetapi apa yang Anda lakukan di dalam fungsi Anda bisa sangat mengerikan, seperti membuat efek samping.
- Saat mendiskusikan perilaku yang diinginkan , dimungkinkan untuk mendapatkan jawaban lintas platform.
- Ketika membahas efek samping , ternyata tidak.
T: Dapatkah saya membuat fungsi saya sendiri untuk menulis data?
Mengapa yakin, jika Anda kreatif. Saya seorang Microsoft SQL Server, jadi saya akan fokus pada platform itu. Halaman fungsi Books Online mengatakan:
Fungsi yang ditentukan pengguna tidak dapat digunakan untuk melakukan tindakan yang mengubah keadaan basis data.
Yang saya katakan:
Anda bukan ayah kandung saya.
Jadi, inilah cara saya melanggar aturan. Peringatan: ikuti ide yang sangat buruk.
- Dalam fungsi Anda, kueri tabel baru yang dibuat khusus untuk tujuan jahat ini, dan kemudian buat sesuatu yang mengawasi tabel untuk pernyataan pilihan, dan kemudian jalankan tindakan (Acara yang Diperpanjang, audit, atau jejak Profiler). Anda dapat menghubungkan semacam alat Rube Goldberg untuk melakukan pekerjaan berdasarkan pada pernyataan pilihan tersebut.
- Dalam fungsinya, panggil kode CLR - heck, Anda bahkan dapat memanggil layanan web . Layanan web itu bisa mendorong data kembali ke database Anda sendiri.
- Dalam fungsinya, panggil xp_cmdshell dan lakukan sesuatu melalui command prompt. (HT @AaronBertrand dalam komentar.)
Semua contoh ini memiliki kelemahan besar dalam bentuk kinerja dan konsistensi transaksional. Anda hanya bertanya apakah secara teoritis bisa dilakukan, dan jawabannya ada ya. Saya tidak akan pernah menggunakan salah satu dari mereka dalam kode saya sendiri - Saya akan mundur dan bertanya, "Apa tujuan bisnis yang saya coba capai di sini, dan apakah ada cara saya bisa melakukannya untuk mencapai kinerja dan konsistensi transaksional ? " Jika Anda menginginkan saran khusus untuk itu, saya akan mengajukan pertanyaan Stack terpisah dengan spesifik.