Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Perbarui Data melalui Fungsi Bernilai Tabel di SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan Nama Login Saat Ini di SQL Server (T-SQL)

  2. Gunakan IDENT_CURRENT() untuk Mengembalikan Nilai Identitas Saat Ini pada Kolom Identitas di SQL Server

  3. Mendapatkan Hibernate dan SQL Server untuk bermain bagus dengan VARCHAR dan NVARCHAR

  4. Menghapus Profil Email Database (SSMS)

  5. IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY di SQL Server:Apa Perbedaannya?