Di SQL Server, dimungkinkan untuk memperbarui data melalui fungsi bernilai tabel.
Yang saya maksud adalah, Anda dapat memperbarui data dalam tabel yang mendasari kueri fungsi.
Misalnya, jika fungsi Anda mengembalikan nama depan seseorang dari tabel, Anda dapat memperbarui nama depan mereka dengan menjalankan UPDATE
pernyataan terhadap fungsi alih-alih tabel.
Perhatikan bahwa ini hanya berfungsi pada fungsi bernilai tabel sebaris (ITVF). Sejauh yang saya ketahui, ini tidak akan berfungsi pada fungsi bernilai tabel multi-pernyataan (MSTVF).
Selain itu, kolom yang Anda perbarui harus berupa kolom yang valid dalam kueri fungsi.
Contoh 1 – Fungsi Sampel
Berikut adalah fungsi cepat yang memilih data dasar dari sebuah tabel.
CREATE FUNCTION udf_GetScore_ITVF( @Player varchar(255)) RETURNS TABLE AS RETURN ( SELECT Score FROM dbo.Scoreboard WHERE Player = @Player ); GO
Fungsi ini hanya memilih skor untuk pemain tertentu.
Saya bisa menggunakan fungsi ini untuk memperbarui skor pemain.
Saya menyadari bahwa Anda biasanya akan mengembalikan lebih dari satu kolom saat menggunakan fungsi bernilai tabel, tetapi saya ingin membuat contoh ini tetap sederhana untuk tujuan demonstrasi.
Contoh 2 – Perbarui Data melalui Fungsi
Berikut adalah contoh memperbarui skor pemain.
Pertama, mari kita lihat berapa skor pemain itu saat ini.
SELECT * FROM udf_GetScore_ITVF('Homer');
Hasil:
+---------+ | Score | |---------| | 1 | +---------+
Jadi Homer memiliki skor 1.
Mari kita gunakan fungsi nilai tabel untuk meningkatkannya.
UPDATE udf_GetScore_ITVF('Homer') SET Score = 99999; SELECT * FROM udf_GetScore_ITVF('Homer');
Hasil:
+---------+ | Score | |---------| | 99999 | +---------+
Jadi saya berhasil meningkatkan skor Homer menggunakan fungsi nilai tabel sebaris.
Contoh 3 – Saat Tidak Berfungsi
Kolom sebenarnya yang dapat Anda perbarui akan bergantung pada kolom yang dipilih dalam kueri. Permintaan saya hanya memilih Score
kolom, jadi saya hanya dapat memperbarui data di kolom itu.
Inilah yang terjadi jika saya mencoba memperbarui data di kolom lain.
UPDATE udf_GetScore_ITVF('Homer') SET Player = 'Apu';
Hasil:
Msg 207, Level 16, State 1, Line 1 Invalid column name 'Player'.
Kita tahu bahwa tabel memiliki Player
kolom (karena ada di WHERE
klausa fungsi). Namun, itu tidak dipilih dalam kueri, dan oleh karena itu, ini bukan kolom yang valid untuk diperbarui.