Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL Tingkat Lanjut:Variasi dan Kasus Penggunaan Berbeda dari Pernyataan Sisipan T-SQL

Dalam artikel saya sebelumnya, saya menunjukkan:

  1. Sisipkan output dari fungsi bernilai tabel ke dalam tabel SQL.
  2. Masukkan output dari fungsi bernilai tabel yang dibuat pada server basis data jarak jauh.

Dalam artikel ini, saya akan menunjukkan:

  1. Menyalin data antara dua tabel, dibuat dalam skema yang berbeda.
  2. Menyalin data antara dua tabel, dibuat dalam database yang berbeda pada server yang sama.
  3. Menyalin data antara dua tabel yang dibuat, di database yang berbeda berada server yang berbeda (Kueri lintas server)

Transfer data antara dua tabel yang dibuat dalam skema yang berbeda.

Untuk menyalin data antara dua tabel yang dibuat dalam skema yang berbeda, kita harus menggunakan sintaks berikut:

MASUKKAN KE . ( COLUMN1, COLUMN2, COLUMN3 .. ) PILIH COLUMN1, COLUMN2, COLUMN3 DARI .

Untuk demonstrasi, saya akan menggunakan WideWorldImportors basis data. Saya ingin menyalin semua catatan dari [Aplikasi].[Orang] tabel ke [dbo].[EmployeesWithoutLogonName] tabel yang memiliki LOGONNAME sama dengan ”NO LOGON .”

Pertama, Mari kita tinjau data dari [Aplikasi].[Orang] meja. Untuk melakukannya, jalankan kueri berikut:

PILIH [PERSONID], [FULLNAME], [PREFERREDNAME], [SEARCHNAME], [LOGONNAME], [PHONENUMBER], [FAXNUMBER], [EMAILADDRESS] FROM APPLICATION.PEOPLE WHERE LOGONNAME ='NO LOGON'

Berikut adalah screenshot dari outputnya:

Sekarang, mari buat [dbo].[EmployeesWithoutLogonName] meja. Untuk melakukannya, jalankan kueri berikut:

BUAT TABEL EMPLOYEESWITHOUTLOGONNAME ( [ID] INT IDENTITY(1, 1), [FULL_NAME] VARCHAR(500), [PREFERRED_NAME] VARCHAR(500), [SEARCH_NAME] NVARCHAR(MAX), [LOGON_NAME] VARCHAR(250), [PHONE_NUMBER] VARCHAR(50), [FAX_NUMBER] VARCHAR(100), [EMAIL_ADDRESS] NVARCHAR(250) )

Sekarang mari kita salin catatan dari [Aplikasi].[Orang] ke [dbo].[KaryawanTanpaLogonName] . Untuk melakukannya, jalankan kueri berikut:

INSERT INTO [DBO].[EMPLOYEESWITHOUTLOGONNAME] ([FULL_NAME], [PREFERRED_NAME], [SEARCH_NAME], [LOGON_NAME], [PHONE_NUMBER], [FAX_NUMBER], [EMAIL_ADDRESS]) SELECT [FULLNAME], [PREFERREDNAME], [PREFERREDNAME] [SEARCHNAME], [LOGONNAME], [PHONENUMBER], [FAXNUMBER], [EMAILADDRESS] FROM APPLICATION.PEOPLE WHERE LOGONNAME ='NO LOGON'

Setelah data dimasukkan, jalankan kueri berikut untuk memverifikasi bahwa data telah disalin.

PILIH * DARI EMPLOYEESWITHOUTLOGONNAME

Berikut adalah outputnya:

Menyalin data antara dua tabel, dibuat dalam database yang berbeda

Seperti yang saya jelaskan di atas, kita dapat menyalin data antar tabel yang dibuat dalam dua skema yang berbeda. Demikian pula, kita dapat menyalin data antara dua tabel yang dibuat dalam dua database yang berbeda. Untuk menyalin data antara dua database, pengguna harus memiliki “db_datareader ” izin pada basis data sumber dan “db_datawriter ” pada database tujuan.

Berikut sintaksnya:

MASUKKAN KE .. ( COLUMN1, COLUMN2, COLUMN3 .. ) PILIH COLUMN1, COLUMN2, COLUMN3 DARI .. 

Sekarang untuk mendemonstrasikannya, saya telah membuat database baru bernama "HR." Untuk membuat database, jalankan perintah berikut.

BUAT SDM DATABASE

Sekarang saya ingin menyalin data EmployeeWithoutLogonName tabel, dibuat di WideWorldImportors database ke “Karyawan ” tabel dibuat di HR basis data.

Pertama, mari buat tabel bernama “Karyawan ” di SDM basis data. Untuk melakukannya, jalankan kueri berikut:

GUNAKAN HR GO CREATE TABLE KARYAWAN ( [ID] INT IDENTITY(1, 1), [FULL_NAME] VARCHAR(500), [PREFERRED_NAME] VARCHAR(500), [SEARCH_NAME] NVARCHAR(MAX), [LOGON_NAME] VARCHAR( 250), [PHONE_NUMBER] VARCHAR(50), [FAX_NUMBER] VARCHAR(100), [EMAIL_ADDRESS] NVARCHAR(250) )

Sekarang untuk menyalin data dari “EmployeeWithoutLogonName ” ke tabel “KARYAWAN ”, mari kita jalankan query berikut:

INSERT INTO HR.DBO.EMPLOYEES ([FULL_NAME], [PREFERRED_NAME], [SEARCH_NAME], [LOGON_NAME], [PHONE_NUMBER], [FAX_NUMBER], [EMAIL_ADDRESS]) PILIH FULL_NAME, PREFERRED_NAME, PHONE_NUMBER, LOG_NUMBER FAX_NUMBER, EMAIL_ADDRESS DARI WIDEWORLDIMPORTERS.DBO.EMPLOYEESWITHOUTLOGONNAME

Setelah data dimasukkan, jalankan kueri berikut untuk memverifikasi bahwa data telah disalin.

PILIH * DARI HR.DBO.EMPLOYEES

Berikut adalah outputnya:

Menyalin data antara dua tabel, dibuat dalam database yang berbeda pada server yang berbeda

Sekarang, sama halnya, kita dapat menyalin data antara dua tabel yang dibuat pada dua database terpisah yang dibuat pada dua server berbeda. Ini dapat dilakukan menggunakan Server Tertaut atau OPENROWSET kata kunci.

Berikut ini adalah sintaks untuk menghubungkan database SQL yang dibuat di server jauh menggunakan Linked Server.

MASUKKAN KE ... ( COLUMN1, COLUMN2, COLUMN3 .. ) SELECT COLUMN1, COLUMN2, COLUMN3 FROM ....> 

Dalam demo ini, saya akan menyalin data Karyawan tabel yang dibuat di database Karyawan ke database SQL yang dibuat di Azure cloud. Untuk melakukan itu, pertama-tama buat database di Azure SQL Instance. Saya telah membuat kumpulan sumber daya server SQL bernama “companyemployees.database.windows.net.

Sekarang untuk membuat database HR pada instance database Azure, buka studio manajemen SQL Server. Di kotak teks nama server, pilih “companyemployees.database.windows.net.” Kami akan menggunakan otentikasi SQL Server untuk menghubungkan contoh SQL. Untuk melakukannya, pilih "otentikasi SQL Server" di kotak tarik-turun jenis otentikasi. Berikan nama pengguna dan kata sandi yang sesuai dan klik sambungkan. Lihat tangkapan layar berikut.

Sekarang untuk membuat “Cloud_HR_DB ” basis data, Tekan Ctrl+N untuk membuka jendela editor kueri dan menjalankan perintah berikut.

BUAT DATABASE CLOUD_HR_DB GO

Lihat gambar berikut.

Setelah database dibuat, jalankan kueri berikut untuk membuat “cEmployee ” tabel di Cloud_HR_DB basis data. Untuk melakukannya, jalankan kueri berikut di HR basis data.

BUAT KARYAWAN TABEL ( [ID] INT IDENTITY(1, 1), [FULL_NAME] VARCHAR(500), [PREFERRED_NAME] VARCHAR(500), [SEARCH_NAME] NVARCHAR(MAX), [LOGON_NAME] VARCHAR(250), [PHONE_NUMBER] VARCHAR(50), [FAX_NUMBER] VARCHAR(100), [EMAIL_ADDRESS] NVARCHAR(250) )

Setelah database dan tabel dibuat, kita perlu membuat server tertaut untuk melakukan kueri lintas server. Untuk membuat server tertaut antara instance server SQL Lokal dan instance server Azure SQL, jalankan perintah berikut pada instance SQL Server Lokal.

GUNAKAN [MASTER] GO EXEC MASTER.DBO.SP_ADDLINKEDSERVER @SERVER =N'AZURE_SQL_SERVER', @SRVPRODUCT=N'', @PROVIDER=N'SQLNCLI', @DATASRC=N'COMPANYEMPLOYEES.DATABASE.WINDOWS.NET' , @CATALOG=N'CLOUD_HR_DB' /* UNTUK ALASAN KEAMANAN SERVER REMOTE LOGIN PASSWORD DIUBAH DENGAN ######## */ EXEC MASTER.DBO.SP_ADDLINKEDSRVLOGIN @RMTSRVNAME=N'AZURE_SQL_SERVER=', 'SALAH', @LOCALLOGIN=NULL, @RMTUSER=N'NISARGUPADHYAY', @RMTPASSWORD='########' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'AZURE_SQL_SERVER', @OPTNAME=N' AKSES DATA', @OPTVALUE=N'TRUE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'AZURE_SQL_SERVER', @OPTNAME=N'RPC', @OPTVALUE=N'TRUE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER =N'AZURE_SQL_SERVER', @OPTNAME=N'RPC OUT', @OPTVALUE=N'TRUE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'AZURE_SQL_SERVER', @OPTNAME=N'CONNECT TIMEOUT', @OPTVALUE=N '0' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'AZURE_SQL_SERVER', @OPTNAME=N'LAZY SC VALIDASI HEMA', @OPTVALUE=N'FALSE' GO EXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'AZURE_SQL_SERVER', @OPTNAME=N'QUERY TIMEOUT', @OPTVALUE=N'0' GO EXEC MASTER.DBO.SP_SERVEROPTION @ SERVER=N'AZURE_SQL_SERVER', @OPTNAME=N'PROMOSI TRANSAKSI PROC JAUH', @OPTVALUE=N'TRUE' GO

Setelah server tertaut dibuat, mari ekspor data Karyawan tabel, dibuat pada instance lokal server SQL ke cEmployee tabel yang dibuat pada Instans Azure SQL Server. Untuk melakukannya, jalankan kueri berikut pada contoh SQL Server lokal:

INSERT INTO [AZURE_SQL_SERVER].Cloud_HR_DB.DBO.cEMPLOYEES ([FULL_NAME], [PREFERRED_NAME], [SEARCH_NAME], [LOGON_NAME], [PHONE_NUMBER], [FAX_NUMBER], [EMAIL_ADDRESS]) PILIH PILIH FULL_NAME LOGON_NAME, PHONE_NUMBER, FAX_NUMBER, EMAIL_ADDRESS FROM HR..EMPLOYEES

Setelah data diekspor dari instans lokal ke instans Azure, jalankan kueri berikut untuk memverifikasi bahwa data telah disalin.

SELECT * FROM [AZURE_SQL_SERVER].Cloud_HR_DB.DBO.cEMPLOYEES

Berikut adalah outputnya:

Kami juga dapat menyalin data ke server jauh tanpa menggunakan Linked Server. Untuk melakukan itu, kita harus menggunakan kata kunci OPENROWSET. OPENROWSET adalah metode ad-hoc untuk menghubungkan dan mengakses sumber data jarak jauh menggunakan OLEDB. Untuk membaca lebih lanjut tentang OPENROWSET, lihat dokumentasi Microsoft tentang OPENROWSET.

Sekarang dalam contoh berikut, saya akan menyalin data dari cEmployee tabel dibuat di Cloud_HR_DB kepada Karyawan database yang dibuat pada instance lokal. Kami hanya akan menyalin catatan yang memiliki Email_Address suka” contoso.com.

Sekarang untuk menyalin data, buat tabel bernama “ContosoEmployee ” di “SDM “basis data. Untuk melakukannya, jalankan kueri berikut:

BUAT TABEL [DBO].[CONTOSOEMPLOYEES] ( [ID] [INT] IDENTITAS(1, 1) NOT NULL, [FULL_NAME] [VARCHAR](500) NULL, [PREFERRED_NAME] [VARCHAR](500) NULL, [SEARCH_NAME] [NVARCHAR](MAX) NULL, [LOGON_NAME] [VARCHAR](250) NULL, [PHONE_NUMBER] [VARCHAR](50) NULL, [FAX_NUMBER] [VARCHAR](100) NULL, [EMAIL_ADDRESS] [NVARCHAR] (250) NULL ) PERGI

Sekarang untuk menyisipkan data menggunakan OPENROWSET, kita perlu mengaktifkan “Kueri terdistribusi Ad Hoc ” opsi lanjutan. Untuk melakukannya, jalankan perintah berikut.

EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS',1CONFIGURE WITH OVERRIDEEXEC SP_CONFIGURE 'AD HOC DISTRIBUTED QUERIES',1CONFIGURE WITH OVERRIDE

Sekarang untuk menyalin data dari karyawan tabel Cloud_HR_DB (Instans Azure) database ke “ContosoEmployee ” di “Karyawan ” database (Instance Lokal), jalankan kueri berikut di server lokal:

GUNAKAN HR GO INSERT INTO CONTOSOEMPLOYEES ([FULL_NAME], [PREFERRED_NAME], [SEARCH_NAME], [LOGON_NAME], [PHONE_NUMBER], [FAX_NUMBER], [EMAIL_ADDRESS]) SELECT * FROM OPENROWSET('SQLNCLI11, ' COMPANYEMPLOYEES.DATABASE.WINDOWS.NET,1433;DATABASE=CLOUD_HR_DB;UID=NISARGUPADHYAY;[email protected]', 'SELECT FULL_NAME, PREFERRED_NAME, SEARCH_NAME, LOGON_NAME, PHONE_NUMBER, FAX_NUMBER FAXIL_NUMBER, 'KONOMI CEPAT_UNTUK SEPERTI''. COM%''')A

Setelah data diekspor dari instans lokal ke instans Azure, jalankan kueri berikut untuk memverifikasi bahwa data telah disalin.

SELECT FULL_NAME, PREFERRED_NAME, SEARCH_NAME, LOGON_NAME, PHONE_NUMBER, FAX_NUMBER, EMAIL_ADDRESS FROM CONTOSOEMPLOYEES

Berikut adalah outputnya:

Pada artikel ini saya telah menjelaskan caranya:

  1. Menyalin data antara dua tabel yang dibuat dalam skema berbeda.
  2. Menyalin data antara dua tabel yang dibuat dalam database berbeda di server yang sama.
  3. Menyalin data antara dua tabel yang dibuat dalam database berbeda dari server yang berbeda (Kueri lintas server).

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memvisualisasikan Tipping Point dengan Plan Explorer

  2. Panduan analisis data:Saatnya untuk unggul dengan menggunakan Excel!

  3. SQL IN vs SQL ADA

  4. 8 Perintah WP-CLI untuk Membersihkan dan Mengoptimalkan Situs Anda

  5. Tujuan Baris, Bagian 2:Semi Bergabung