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

Fungsi SQL Server Sederhana untuk Memecahkan Masalah Dunia Nyata

Pengantar

Artikel hari ini berasal dari skenario yang kami alami dalam praktik beberapa waktu lalu. Kami mengelola sistem transaksi kartu yang disebut Postilion, dan kami harus memperbarui data di kolom yang berisi alamat IP sebagai bagian dari string dengan alamat IP baru. Ini diperlukan karena alamat IP dari server yang menghosting solusi biasanya akan berubah karena peralihan atau pemulihan data ke lingkungan UAT.

Data tentang server disimpan dalam database, dan tidak ada cara untuk memperbarui yang sama dari aplikasi tanpa baris demi baris. Jadi, kami harus menemukan solusi yang efisien menggunakan fungsi SQL Server LEN dan SUBSTRING (atau REPLACE).

Mereproduksi Lingkungan

Untuk demonstrasi ini, kami hanya mereproduksi tabel yang diperlukan untuk menunjukkan apa yang kami lakukan. Tentu saja, datanya tidak sama dengan di produksi.

Daftar 1 menunjukkan bagaimana kami membuat dan mengisi tabel contoh kami:

-- Listing 1: Create and Populate Node_Saps Table
create database postilion;

use postilion
go
-- drop table node_saps
create table node_saps (
[node] varchar(50)
      ,[sap] varchar(50)
      ,[type] varchar(50)
      ,[protocol] varchar(50)
      ,[address] varchar(50)
	  ,[setup_data] varchar(50)
      ,[secure] varchar(50)
      ,[max_nr_conn] varchar(50)
      ,[msg_mode] varchar(50)
      ,[nr_active_conns] varchar(50)
      ,[filter_properties] varchar(50)
	  )

use postilion
go
insert into node_saps values ('EGH01',2,'sink','TCP','10.2.100.42_atm_ghana', 100,'YES',10,'open',5,'intense');
insert into node_saps values ('EGH02',3,'sink','TCP','10.2.100.42_atm_ghana', 120,'YES',10,'open',5,'moderate');
insert into node_saps values ('ENG01',4,'source','TCP','10.2.100.42_atm_nigeria', 175,'YES',40,'open',19,'premium');
insert into node_saps values ('EBF01',6,'sink','TCP','10.2.100.42_atm_burkina', 122,'YES',20,'open',4,'intense');
insert into node_saps values ('EGQ01',7,'sink','TCP','10.2.100.42_atm_equatorial', 200,'YES',10,'open',2,'moderate');

Tabel ini berisi beberapa kolom sederhana. Kolom yang menarik di sini adalah alamat kolom. Tugas kita adalah mengubah alamat IP dari 10.2.100.42 menjadi 10.2.100.79.

Seperti yang ditunjukkan pada Gambar 1, data yang disimpan di kolom alamat bukan alamat IP saja. Ini adalah string, dan alamat IP hanya sebagian saja. Oleh karena itu, kami tidak dapat melakukan pembaruan sederhana. Setiap baris memiliki nilai yang berbeda, dan kita harus mengisolasi oktet terakhir dari alamat IP dan membuat perubahan di sana.

Ganti Bagian dari String di SQL Server Menggunakan Fungsi SUBSTRING()

Untuk mencapai persyaratan tugas, kami menggunakan dua fungsi sederhana:fungsi LEN() dan fungsi SUBSTRING(). Kami akan memberikan SUBSTRING di SQL Server dengan contoh.

  • SQL LEN() fungsi mengembalikan jumlah karakter dalam string. Ini penting untuk solusi kami karena data asli agak kotor – tidak semua yang ada di kolom alamat adalah alamat IP. Oleh karena itu, kami harus memastikan memperbarui apa yang ingin kami perbarui.
  • SQL Server SUBSTRING() fungsi mengembalikan bagian dari karakter, biner, teks, atau ekspresi gambar di SQL Server. Kami menggunakannya untuk memastikan bahwa kami akan mengubah bagian string di kolom alamat yang ingin kami ubah – Alamat IP yang sebenarnya.

Daftar 2 dan Gambar 2 menunjukkan kode untuk memvisualisasikan hasil penggantian .42 dengan .79 di kolom alamat.

-- Listing 2: Select Statement to Verify Solution
USE postilion
GO
SELECT [node]
      ,[sap]
      ,[type]
      ,[protocol]
      ,[address]
,substring (address,1,9) + '79' + substring (address,12,20) manrep
      ,[setup_data]
      ,[secure]
      ,[max_nr_conn]
      ,[msg_mode]
      ,[nr_active_conns]
      ,[filter_properties]
  FROM [postilion].[dbo].[node_saps]
WHERE len(address) > 10

Catatan:Kami membuat kolom terhitung. Dengan demikian, kita dapat membandingkan nilai asli dengan perubahan sebelum menerapkan perubahan tersebut.

Memperbarui Bagian dari String di SQL Menggunakan Fungsi REPLACE()

Kita bisa melakukan ini lebih sederhana dengan menggunakan fungsi REPLACE() . Ini menggantikan semua kemunculan nilai string tertentu dengan nilai string lain.

Fungsi REPLACE mengembalikan string yang menggantikan substring dengan substring lain.

Lihatlah kode di Listing 3. Kami mendapatkan hasil yang sama persis seperti yang ditunjukkan pada Gambar 2.

-- Listing 3: Select Statement to Verify Solution Using REPLACE()
USE postilion
GO
SELECT [node]
      ,[sap]
      ,[type]
      ,[protocol]
      ,[address]
,replace(address,'.42','.79') rep
      ,[setup_data]
      ,[secure]
      ,[max_nr_conn]
      ,[msg_mode]
      ,[nr_active_conns]
      ,[filter_properties]
  FROM [postilion].[dbo].[node_saps]
WHERE len(address) > 10

Sintaks untuk Fungsi SUBSTRING dalam Pernyataan UPDATE

Mari kita visualisasikan solusi kita menggunakan pernyataan SELECT. Kita perlu melihat di mana kita telah memasukkan fungsi LEN() bersama dengan fungsi SUBSTRING() atau fungsi REPLACE() yang lebih mudah.

Listing 4 menunjukkan bagaimana kita mengeksekusi pernyataan UPDATE. Demi keamanan, kami lampirkan dalam sebuah transaksi. Jika ada yang salah, kami dapat mengembalikannya.

-- Listing 4: UPDATE Statement Using SUBSTRING()

BEGIN TRAN
update [postilion].[dbo].[node_saps]
set address=substring (address,1,9) + '79' + substring (address,12,20)
where substring (address,10,2)= '42' and
len(address) > 10

SELECT * FROM [postilion].[dbo].[node_saps]

--ROLLBACK
--COMMIT

Jika kami puas dengan hasilnya, kami hanya berkomitmen.

Menggunakan Fungsi SQL REPLACE dalam pernyataan UPDATE

Kita dapat mencapai hasil yang sama menggunakan fungsi REPLACE() dalam SQL (lihat Daftar 5). Ini berfungsi karena data spesifik kami, “.42” HANYA muncul SEKALI di setiap baris.

-- Listing 5: UPDATE Statement Using REPLACE()

BEGIN TRAN
update [postilion].[dbo].[node_saps]
set address=replace(address,'.42','.79')
where substring (address,10,2)= '42' and
len(address) > 10

SELECT * FROM [postilion].[dbo].[node_saps]

--ROLLBACK
--COMMIT

Kesimpulan

Jadi, kami telah menunjukkan cara mengganti bagian dari beberapa string di kolom menggunakan fungsi SUBSTRING dan REPLACE. Keberhasilan tugas tergantung pada pemahaman yang tepat dari data yang terlibat. Tentu saja, kita perlu berkolaborasi dengan pengembang dan pakar yang memiliki pengalaman yang diperlukan untuk memprediksi implikasi dari kesalahan apa pun dalam aplikasi.

Selain itu, kami mengambil tindakan pencegahan:

  • Kami menggunakan pernyataan SELECT dan kolom yang dihitung untuk menentukan bagaimana hasil akhirnya akan terlihat.
  • Kami menyertakan pernyataan UPDATE kami dalam transaksi untuk memastikan rollback pilihan.

Anda dapat melangkah lebih jauh dalam mengambil tindakan pencegahan dan membuat cadangan database:

Referensi

  1. Fungsi LEN()
  2. Fungsi SUBSTRING()
  3. Fungsi REPLACE

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat daftar file di dalam folder dengan SQL Server

  2. Bagaimana cara mengubah SQL Server 2005 menjadi case sensitive?

  3. Bagaimana Menambahkan ATAU Menjatuhkan Kolom Dari Tabel yang Diaktifkan CDC Tanpa Kehilangan Data di Database SQL Server - Tutorial SQL Server

  4. Cara Memperbaiki "Pernyataan ALTER TABLE SWITCH gagal"

  5. Menilai Pengaturan Pemantauan Kinerja Basis Data Anda