Sponsor

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 ៖

​​​ 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

     
៣. បន្ទាប់មក  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

​​​​​​​​​​​​​​​​​​​                                                                         សូមអរគុណ!