Yuph kali ini kita akan membahas fungsi menarik (SELECT SCOPE_IDENTITY(), SELECT LAST_INSERT_ID() dan RETURNING PK) yang dimiliki oleh database2x terkenal seperti SQL Server, MySQL dan Firebird.
Dari nama fungsinya kita bisa menebak kegunaan dari fungsi diatas yaitu untuk mendapatkan nilai ID terakhir (biasanya bertipe angka) yang diinputkan.
Saya dan mungkin Anda biasanya dalam merancang tabel untuk selalu menambahkan field ID dengan attribut IDENTITY/AUTONUMBER dan sekaligus dijadikan sebagai PRIMARY KEY.
Tentunya hal ini kita lakukan untuk mempermudah dalam proses manipulasi data (edit dan delete).
Contoh beberapa tabel yang biasanya menggunakan field ID untuk PRIMARY KEY dan sekaligus diset dengan attribut IDENTITY/AUTONUMBER
Bagi yang males membaca referensi (termasuk sy :D) biasa menuliskan kode berikut untuk mengINSERTkan dan mendapatkan nilai ID yang terakhir, kita ambil contoh tabel provinsi.
1234567891011121314151617181920212223
PrivateSubbtnInsert_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnInsert.ClickDimlastIDAsLong=0' langkah 1 - menambahkan datastrSql="INSERT INTO provinsi (keterangan) VALUES (@1)"UsingcmdAsNewSqlClient.SqlCommand(strSql,conn)Withcmd.Parameters.Clear().Parameters.AddWithValue("@1","Riau").ExecuteNonQuery()EndWithEndUsing' langkah 2 - mengambil id terakhir dg memanfaatkan fungsi MAXstrSql="SELECT MAX(id) FROM provinsi"UsingcmdAsNewSqlClient.SqlCommand(strSql,conn)lastID=Convert.ToInt32(cmd.ExecuteScalar())EndUsing' tampilkan ID terakhirMessageBox.Show("Last ID : "&lastID.ToString())EndSub
Sekarang kita lihat bedanya jika memanfaatkan fungsi SELECT SCOPE_IDENTITY().
123456789101112131415
PrivateSubbtnInsert_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnInsert.ClickDimlastIDAsLong=0strSql="INSERT INTO provinsi (keterangan) VALUES (@1) SELECT SCOPE_IDENTITY()"' ada tambahan SELECT SCOPE_IDENTITY()UsingcmdAsNewSqlClient.SqlCommand(strSql,conn)Withcmd.Parameters.Clear().Parameters.AddWithValue("@1","Riau")lastID=Convert.ToInt32(.ExecuteScalar())EndWithEndUsingMessageBox.Show("Last ID : "&lastID.ToString())EndSub
Gimana lebih simple kan ? :)
Oke sekarang kita lihat kode untuk MySQL(SELECT LAST_INSERT_ID) dan Firebird (RETURN KOLOM_PK).
' MySQLPrivateSubbtnInsert_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnInsert.ClickDimlastIDAsLong=0strSql="INSERT INTO provinsi (keterangan) VALUES (@1); SELECT LAST_INSERT_ID()"UsingcmdAsNewMySqlClient.MySqlCommand(strSql,conn)Withcmd.Parameters.Clear().Parameters.AddWithValue("@1","Riau")lastID=Convert.ToInt32(.ExecuteScalar())EndWithEndUsingMessageBox.Show("Last ID : "&lastID.ToString())EndSub' FirebirdPrivateSubbtnInsert_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesbtnInsert.ClickDimlastIDAsLong=0strSql="INSERT INTO provinsi (keterangan) VALUES (@1) RETURNING ID"' ID -> kolom primary keyUsingcmdAsNewFirebirdClient.FbCommand(strSql,conn)Withcmd.Parameters.Clear().Parameters.AddWithValue("@1","Riau")lastID=Convert.ToInt32(.ExecuteScalar())EndWithEndUsingMessageBox.Show("Last ID : "&lastID.ToString())EndSub