Ms. SQL Server and Java Programming
របៀបប្រើប្រើបា្រស់ Merge Data នៅលើ SQL Server 2012 Store Procedure
សេចក្តីផ្តើម
តើអ្វីជា Merge statement?
Merge statement គឺជាការរួមបញ្ចូលមួយដែលអាចឲ្យអ្នកធ្វើការ Insert, Update និង Delete នៅលើ query តែមួយ ។ ជាទូទៅគេប្រើ Merge statement សម្រាប់ការរួមបញ្ចូលគ្នារវាងការ Insert និង Update ។ Merge វាពិនិត្យមើល Row(ជួរដេកនៃ Table) ដែលមាននៅក្នុង Table ប្រសិន Row មិនមានវានឹង add បន្ថែមនូវទិន្នន័យថ្មី ។ ផ្ទុយមកវិញ ប្រសិនវាមានរួចហើយ វានឺងធ្វើការ Update ។
Merge statement ជាទូទៅ វាជាការរួមគ្នារវាង Table ដើម (source table) និង Table គោលដៅ (destination table ) ។ Table ដើម ផ្ទុកនូវទិន្នន័យដែលនឺងត្រូវ Insert រឺ Update ទៅក្នុងTable គោលដៅ ។ Table គោលដៅ វានឹងធ្វើការ Insert រឺក៏ Update ។
ទម្រង់ទូទៅនៃការសរសេរ Merge Statement
MERGE schema.TableName destination
USING schama.TableName source
ON destination.ColumnNames = source.ColumnNames
WHEN MATCHED THEN
UPDATE SET destination.ColumnNames = source.ColumnNames,
WHEN NOT MATCHED BY TARGET THEN
INSERT (ColumnNames) VALUES (source.ColumnValues);
ឧទាហរណ៍៖ យើងមាន HotelMng databaseមួយ ដែលមាន Table ចំនួនពីរ គឺ tbl_CustmerTemp ជា Source Table និង tbl_Customer ដែលមានទិន្នន័យដូចខាងក្រោមជា Destination Table ហើយ Table ទាំងពីរនេះមាន ឈ្មោះ និង ចំនួន Column ដូចគា្នតែ CustomerID នៃ tbl_CustomerTemp មិនមែនជា Auto Increment Primary Key ចំណែកឯ CustomerID នៃ tbl_Customerគឺជា Auto Increment Primary Key។
![]() |
Source Table(tbl_CustomerTemp) |
![]() |
Destination Table (tbl_customer) |
ការសរសេរ និងការប្រើប្រាស់ Merge Statement
ដើម្បីសរសេរ Merge Statement ដែលអាចហៅទៅប្រើ នៅក្នុង Java Code បានអ្នកត្រួវការសរសេរ Merge Statement នៅលើ Store Procedure ។
ខាងក្រោមនេះ គឺជាការបង្កើត Store Procedure៖
១. បើក Query Editor(New Query) នៅលើ SQL Server Management Studio(SSMS)
២. នៅក្នុង Query Editor សូមសរសេរ និង Execute នូវ T-SQL code ៖
២. នៅក្នុង Query Editor សូមសរសេរ និង Execute នូវ T-SQL code ៖
Use HotelMng;
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create Procedure addCustomer(@CustID int, @FullName nvarchar(30),
@Gender nchar(10),@Address nvarchar(100), @Phone varchar(10),
@Email varchar(30))
As
Begin
Insert into tbl_CustomerTemp(CustomerID, FullName,Gender,
Address,Phone, Email) Values(@CustID, @FullName,@Gender, @Address,
@Phone,@Email);
Merge tbl_Customer dest
Using tbl_CustomerTemp src
On dest.CustomerID = src.CustomerID
When Matched Then
Update Set
dest.FullName = src.FullName,
dest.Gender = src.Gender,
dest.Address = src.Address,
dest.Phone = src.Phone,
dest.Email = src.Email
When Not Matched By Target Then
Insert(FullName, Gender, Address, Phone, Email)
Values(src.FullName, src.Gender, src.Address,
src.Phone, src.Email);
End
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create Procedure addCustomer(@CustID int, @FullName nvarchar(30),
@Gender nchar(10),@Address nvarchar(100), @Phone varchar(10),
@Email varchar(30))
As
Begin
Insert into tbl_CustomerTemp(CustomerID, FullName,Gender,
Address,Phone, Email) Values(@CustID, @FullName,@Gender, @Address,
@Phone,@Email);
Merge tbl_Customer dest
Using tbl_CustomerTemp src
On dest.CustomerID = src.CustomerID
When Matched Then
Update Set
dest.FullName = src.FullName,
dest.Gender = src.Gender,
dest.Address = src.Address,
dest.Phone = src.Phone,
dest.Email = src.Email
When Not Matched By Target Then
Insert(FullName, Gender, Address, Phone, Email)
Values(src.FullName, src.Gender, src.Address,
src.Phone, src.Email);
End
៣. បន្ទាប់មក Execute T-SQL code ខាងលើ
Database Connection Class
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;
public class DBConnection {
public static Connection connector(){
Connection con = null;
try{
String url = "jdbc:sqlserver://localhost:1433;databaseName=HotelMng;user=sa;password=sa123";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(url);
return con;
}
catch(ClassNotFoundException | SQLException e){
JOptionPane.showMessageDialog(null, e.getMessage());
}
return null;
}
}
Note : ដើម្បីភ្ជាប់ Connection ទៅកាន់ Database អ្នកត្រូវ add library នៅក្នុង Java Project ឈ្មោះ sqljdbc4.jar ដែល Library នេះអ្នកអាច download ពី http://www.java2s.com/Code/Jar/s/Downloadsqljdbc420jar.htmការហៅ Store Procedure ដោយ Java Program
ដើម្បី ហៅ Store Procedure ដែលមានឈ្មោះ addCustomer ខាងលើអ្នកត្រូវ Design Java Form ដូចខាងក្រោម៖
១. CustomerForm ដែលមាន Table Model បង្ហាញពីទិន្នន័យរបស់ Customer ហើយយើងអាច
Add, Update Delete និង Print Customer Report ប៊ូតុង ៖
![]() |
CustomerForm |
ខាងក្រោមជា Method ដែលបង្ហាញទិន្នន័យខាងលើក្នុង tbl_Customer (JTable)
private void showDataTable(){
try {
tbl_customer.setModel(new ResultSetTableModel(DBConnection.connector(), "Select * from tbl_Customer"));
} catch (SQLException ex) {
Logger.getLogger(CustomerForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
នៅក្នុង Method ខាងលើខ្ញុំបានប្រើប្រាស់ ResultSetTableModel ដែល Import ពី npic.cs.java.smey.edu.resultTable.ResultSetTableModel នៅ Library របស់ខ្ញុំផ្ទាល់ ។ អ្នកអាច download ពី Google drive :
https://drive.google.com/folderview?id=0B6WuCbRyBNNRRWhDc3h0VmU0em8&usp=sharing
ឈ្មោះ JTRS_NPIC01.jar
២. នៅពេលអ្នក ចុចលើ ប៊ូតុង Add អ្នកអាច Insert ទិន្នន័យរបស់ Customer ដោយចុចប៊ូតុង Save បន្ទាប់ពីអ្នក បំពេញទិន្នន័យនៅក្នុង TextField ដូចជា Full Name, Gender Address.... រួចរាល់
![]() |
Add New or Update Customer Form |
ដើម្បី Save ទិន្នន័យរបស់ Customer អ្នកត្រូវហៅ addCustomer Store Procedure ដោយសរសរ Code ដូចខាងក្រោមបន្ទាប់ពីអ្នក ដាក់ Action Performed នៅលើប៊ូតុង Save ៖
private void btn_SaveActionPerformed(java.awt.event.ActionEvent evt) {
CallableStatement cstm = null;
String query = "{call addCustomer(?,?,?,?,?,?)}";
try {
cstm = DBConnection.connector().prepareCall(query);
cstm.setInt(1, Integer.parseInt(txt_CustomerID.getText()));
cstm.setString(2, txt_CustomerName.getText());
if(getRd_Male().isSelected())
cstm.setString(3, getRd_Male().getText());
else
cstm.setString(3, Rd_Female.getText());
cstm.setString(4, txt_Address.getText());
cstm.setString(5, txt_Phone.getText());
cstm.setString(6, txt_Email.getText());
int exe = cstm.executeUpdate();
if(exe > 0){
sqlCtrl.executeUpdate("Delete from tbl_CustomerTemp");
CustomerForm.refreshTable().setModel(new ResultSetTableModel(DBConnection.connector(), "Select * from tbl_Customer"));
}
} catch (SQLException ex) {
Logger.getLogger(AddNewCustomerForm.class.getName()).log(Level.SEVERE, null, ex);
}
finally{
try {
cstm.close();
DBConnection.connector().close();
} catch (SQLException ex) {
Logger.getLogger(AddNewCustomerForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
ប្រសិនបើអ្នកមិនច្បាស់ អ្នកអាចទស្សនាវិដេអូ នៅក្នុង Youtube: https://youtu.be/ydQnz8CY_6U
សូមអរគុណ!