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

SQL Lanjutan:Sisipkan output dari fungsi bernilai tabel berparameter dalam tabel SQL

Dalam artikel ini, saya akan menunjukkan hal berikut:

  1. Cara menyisipkan output dari fungsi bernilai tabel ke dalam tabel SQL.
  2. Cara menyisipkan output dari fungsi bernilai tabel yang dibuat pada server basis data jauh.

Apa yang dimaksud dengan pernyataan “Sisipkan ke dalam”

Di RDBMS, "Insert into" adalah salah satu pernyataan SQL dasar. Digunakan untuk memasukkan record baru ke dalam tabel SQL. Dengan menggunakan pernyataan tersebut, kita dapat melakukan tugas-tugas berikut:

  • Menyisipkan catatan baru dalam tabel (Sisip Dasar).
  • Menyisipkan nilai kolom tertentu dalam tabel.
  • Sisipkan output yang dihasilkan oleh prosedur tersimpan dalam tabel SQL.

Untuk mendemonstrasikan hal di atas, mari buat tabel bernama “Siswa ” di DemoDatabase. Jalankan kode berikut untuk membuat tabel:

BUAT TABEL MAHASISWA ( ID INT IDENTITY(1, 1) PRIMARY KEY, FIRSTNAME VARCHAR(250), NAMA LAST VARCHAR(250), ADMISSIONDATE DATETIME, GRADE CHAR(1) )

Lakukan penyisipan dasar

Untuk melakukan penyisipan dasar, kita perlu memberikan nama tabel target dan nilai tabel. Berikut ini adalah sintaks dasar dari pernyataan insert dasar:

MASUKKAN KE  NILAI ( , .. )

Misalnya, kita ingin memasukkan nama depan, nama belakang, dan nilai tiga siswa di tabel “Siswa”. Untuk melakukannya, jalankan kode berikut:

MASUKKAN KE DALAM NILAI SISWA ('NISARG', 'UPADHYAY', '2018-09-11', 'A'), ('RAGHAV', 'DATTA', '2017-10-01', 'A') , ('KIRAN', 'AMIN', '31-01-2016', 'A')

Jalankan kueri “Pilih” terhadap “Siswa” untuk meninjau hasilnya.

PILIH NAMA DEPAN, NAMA BELAKANG, TANGGAL PENDAFTARAN, KELAS DARI SISWA

Hasilnya adalah sebagai berikut:

Menyisipkan nilai kolom tertentu dalam tabel

Untuk menyisipkan nilai dalam kolom tabel tertentu, Anda perlu memberikan nama tabel target dan nama kolom tempat Anda ingin menyisipkan data. Berikut sintaksnya.

MASUKKAN KE  ( KOLOM 1 , KOLOM 2 ) NILAI ( , .. )

Misalnya, kami ingin menyisipkan nama depan dan nama belakang dua siswa di kolom “Siswa " meja. Untuk melakukannya, jalankan kode berikut:

MASUKKAN KE MAHASISWA (NAMA DEPAN, NAMA BELAKANG) NILAI ('NIMESH', 'UPADHYAY'), ('RUPESH', 'DATTA')

Jalankan kueri “Pilih” terhadap “Siswa ” tabel.

PILIH NAMA DEPAN, NAMA BELAKANG, TANGGAL PENDAFTARAN, KELAS DARI SISWA

Outputnya terlihat sebagai berikut:

Masukkan output, hasilkan dengan prosedur tersimpan

Untuk menyisipkan output dari prosedur tersimpan dalam tabel, kita perlu menentukan nama tabel target dan prosedur tersimpan sumber. Untuk menghasilkan output dari stored procedure, kita perlu menggunakan kata kunci “exec” atau “EXECUTE”. Jadi, kita perlu memberikan nama tabel atau nama kolom diikuti dengan kata kunci “exec”. Berikut sintaksnya:

MASUKKAN KE  ( KOLOM 1 , KOLOM 2 ) EXEC 

Misalnya, kita ingin menyisipkan output dari prosedur yang mengisi nama-nama siswa yang tanggal masuknya bukan nol. Untuk melakukannya, kita akan membuat prosedur tersimpan bernama “spGet_Student_AdmissionDate ”. Untuk membuat prosedur tersimpan, jalankan kode berikut:

GUNAKAN DEMODATABASE GO CREATE PROCEDURE SPGET_STUDENT_ADMISSIONDATE SEBAGAI BEGIN SELECT ISNULL(FIRSTNAME, '') + ' ' + ISNULL(LASTNAME, '') AS STUDENTNAME, ADMISSIONDATE, GRADE FROM STUDENTS MANA TANGGAL PENDAFTARAN AKHIR 

Setelah prosedur dibuat, jalankan prosedur dengan mengeksekusi kode berikut:

JALANKAN spGet_Student_Admissiondate

Outputnya terlihat sebagai berikut:

Seperti yang saya sebutkan di atas, kami ingin memasukkan output dari prosedur tersimpan bernama “spGet_Student_Admissiondate ” dalam tabel sementara. Pertama, jalankan kode berikut untuk membuat tabel:

 ( ID INT IDENTITY(1, 1), STUDENTNAME VARCHAR(250), ADMISSIONDATE DATETIME, GRADE CHAR(1) )

Setelah tabel dibuat, jalankan kode berikut untuk memasukkan output dari “spGet_Student_Admissiondate ” ke “#TempStudents ”.

INSERT INTO #TEMPSTUDENTS EXECUTE SPGET_STUDENT_ADMISSIONDATE Output:(3 baris terpengaruh)

Sekarang mari kita periksa output dari “#TEMPSTUDENTS ”. Untuk melakukannya, jalankan kode berikut:

Sekarang, seperti yang saya sebutkan di atas, saya akan mendemonstrasikan bagaimana kita bisa menyisipkan output yang dihasilkan oleh fungsi bernilai tabel dalam Tabel SQL. Pertama, mari kita pahami apa itu fungsi bernilai tabel.

Apa itu Fungsi Bernilai Tabel

Fungsi bernilai tabel adalah kode T-SQL khusus yang menerima parameter/parameter dan berdasarkan kondisi yang ditentukan dalam variabel, mengembalikan hasil yang ditetapkan dalam variabel tabel. Berikut ini adalah manfaat menggunakan fungsi bernilai tabel:

  1. Dapat dieksekusi dalam kueri Pilih.
  2. Ini dapat digunakan di beberapa bagian kueri, misalnya dalam pernyataan Kasus, di mana/memiliki klausa.
  3. Output dari fungsi bernilai tabel adalah recordset, sehingga Anda dapat menggabungkan fungsi tersebut dengan tabel.

Masukkan Output dari fungsi bernilai tabel sebaris dalam tabel SQL

Di bagian ini, saya akan menjelaskan cara menyisipkan output dari fungsi bernilai tabel ke dalam tabel SQL menggunakan T-SQL.

Untuk demonstrasi, saya menggunakan database AdventureWorks2014. Saya membuat fungsi tabel multi-nilai sebaris bernama “GetEmployeesbyHireDate .” Fungsi ini mengisi informasi karyawan, dipekerjakan dalam tanggal dan waktu tertentu. Fungsi ini menggunakan @FormDate dan @Hari ini te parameter untuk menyaring data. Keluaran dari fungsi tersebut akan disimpan dalam Tabel SQL.

Kode berikut membuat fungsi:

BUAT FUNGSI GETEMPLOYEESBYHIREDATE (@FROMDATE AS DATETIME, @TODATE AS DATETIME) RETURNS @EMPLOYEES TABLE ( EMPLOYEENAME VARCHAR (MAX), BIRTHDATE DATETIME, JOBTITLE VARCHAR(150), EMAILID PHONERCHARBER(100), EMAILID PHONERCHARBER(100), DATETIME ) AS MULAI INSERT INTO @EMPLOYEES SELECT ( ISNULL( B.FIRSTNAME, '') + ' ' + ISNULL( B.MIDDLENAME, '') + ' ' + ISNULL( B.LASTNAME, '') )AS EMPLOYEENAME, A .TANGGAL ULANG, B.JOBTITLE, B.EMAILADDRESS, B.PHONENUMBER, A.HIREDATE FROM [SUMBER DAYA MANUSIA].[EMPLOYEE] A INNER JOIN [HUMANRESOURCES].[VEMPLOYEE] B PADA A.BUSINESSENTITYID =B.BUSINESSENTITYID DIMANA. @FROMDATE DAN @TODATE RETURN END

Menggunakan kueri Select, kita bisa mendapatkan output dari Fungsi SQL. Misalnya, Anda ingin mengisi daftar karyawan, yang direkrut pada tahun 2009. Jalankan kueri berikut untuk mendapatkan daftar:

DECLARE @FROMDT DATETIME DECLARE @TODT DATETIME SET @FROMDT='2009-01-01' SET @TODT='2009-12-31' SELECT * FROM GETEMPLOYEESBYHIREDATE(@FROMDT, @TODT)

Output dari query di atas terlihat sebagai berikut:

Sekarang, buat tabel bernama “tblEmploye e” untuk menyimpan output dari “GetEmployeesbyHiredate " fungsi. Kode berikut membuat tabel bernama “tblEmployee ”.

BUAT TABEL KARYAWAN ( NAMA KARYAWAN VARCHAR (MAX), TANGGAL TANGGAL, JOBTITLE VARCHAR(150), EMAILID VARCHAR(100), NOMOR TELEPON VARCHAR(20), WAKTU TANGGAL HIREDATE )

Seperti yang saya sebutkan sebelumnya, kami ingin mengisi informasi karyawan, yang dipekerjakan pada tahun 2009. Untuk melakukannya, masukkan output GetEmployeesbyHireDate fungsi di tblKaryawan meja. Untuk melakukannya, jalankan kode berikut:

DECLARE @FROMDT DATETIME DECLARE @TODT DATETIME SET @FROMDT='2009-01-01' SET @TODT='2009-12-31' INSERT INTO TBLEMPLOYEES SELECT EMPLOYEENAME, ULANG TAHUN, JOBTITLE, EMAILID, PHONENUMBER, HIREDATELOYE BY (@FROMDT, @TODT)

Mari kita verifikasi bahwa data telah dimasukkan ke dalam tabel. Untuk melakukannya, jalankan kode berikut:

PILIH * DARI TBLEMPLOYEES

Outputnya terlihat sebagai berikut:

Menyisipkan data dalam tabel dari database Jarak Jauh

Terkadang, Anda mungkin ingin mengekstrak data dari server yang disimpan di pusat data yang berbeda. Ini dapat dilakukan dengan menggunakan server SQL Linked.

Pada bagian ini, saya akan menjelaskan cara menyisipkan output dari fungsi nilai tabel, yang dibuat di server jauh. Sekarang untuk mendemonstrasikan skenarionya, berikut ini adalah pengaturannya.

[id tabel=57 /]

Dalam demo, kami akan melakukan tugas-tugas berikut:

  1. Di server sumber (SQL_VM_1 ), buat fungsi bernilai tabel bernama “getCustomerByCountry ” pada “AdventureWorks2014 ” database untuk mengisi data.
  2. Di server tujuan, buat server tertaut bernama “Remote_Server ” untuk menjalankan fungsi (getCustomerByCountry ).
  3. Di server tujuan, buat tabel dengan nama “Pelanggan ” untuk menyimpan data, diambil oleh fungsi jarak jauh (getCustomerByCountry ).

Gambar berikut mengilustrasikan penyiapan.

Tugas yang akan dilakukan pada server Sumber:

Di server sumber (SQL_VM_1 ), buat fungsi bernama “getCustomerByCountry .” Ini mengisi rincian pelanggan yang berlokasi di negara atau wilayah tertentu. Fungsi ini menggunakan @NamaNegara parameter untuk menyaring data. Jalankan kode berikut untuk membuat fungsi.

Alter FUNCTION Getcustomerbycountry(@CountryName VARCHAR)mengembalikan @Customers TABLE ( customer_name VARCHAR(500), phoennumber VARCHAR(50), alamat email VARCHAR(100), alamat VARCHAR(maks), kota VARCHAR(150), negara VARCHAR(250 ), kode pos VARCHAR(50))SEBAGAI MULAI MASUKKAN KE @Pelanggan PILIH nama_pelanggan, nomor telepon, alamat email, alamat, kota, negara, kode pos DARI pelanggan DI MANA negara [email protected] KEMBALI AKHIR

Tugas yang harus dilakukan pada Server Tujuan:

Untuk mengisi data dari server sumber (SQL_VM_1 ), pertama, buat server tertaut antara sumber (SQL_VM_1 ) dan tujuan (SQL_VM_ 2). Jalankan kode berikut di server tujuan (SQL_VM_2 ) untuk membuat server tertaut.

GUNAKAN [MASTER]GOEXEC MASTER.DBO.SP_ADDLINKEDSERVER @SERVER =N'SQL_VM_1', @SRVPRODUCT=N'SQL SERVER'GOEXEC MASTER.DBO.SP_ADDLINKEDSRVLOGIN @RMTSRVNAME=N' Remote_Server',@USESELF=N'FALSE' ,@LOCALLOGIN=NULL,@RMTUSER=N'SA',@RMTPASSWORD='########'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'COLLATION COMPATIBLE', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'DATA ACCESS', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server' , @OPTNAME=N'DIST', @OPTVALUE=N'FALSE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'PUB', @OPTVALUE=N'FALSE'GOEXEC MASTER.DBO. SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'RPC', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'RPC OUT', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'SUB', @OPTVALUE=N'FALSE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTN AME=N'CONNECT TIMEOUT', @OPTVALUE=N'0'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'COLLATION NAME', @OPTVALUE=NULLGOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'LAZY SCHEMA VALIDATION', @OPTVALUE=N'FALSE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'QUERY TIMEOUT', @OPTVALUE=N' 0'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=N'USE REMOTE COLLATION', @OPTVALUE=N'TRUE'GOEXEC MASTER.DBO.SP_SERVEROPTION @SERVER=N'Remote_Server', @OPTNAME=PROMOSI TRANSAKSI N'REMOTE PROC', @OPTVALUE=N'FALSE'GO

Setelah server tertaut dibuat, buat tabel SQL untuk menyimpan informasi pelanggan, dan isi dengan menjalankan fungsi SQL, yang dibuat di server sumber (SQL_VM_1 ).

Jalankan kode berikut untuk membuat tabel.

GUNAKAN DEMODATABASEGOCREATE TABLE PELANGGAN ( ID INT IDENTITY(1, 1), CUSTOMER_NAME VARCHAR(500), PHONENUMBER VARCHAR(50), EMAILADDRESS VARCHAR(100), ALAMAT VARCHAR(MAX), CITY VARCHAR(150), COUNTRY VARCHAR( 250), KODE POS VARCHAR(50) )

Menggunakan server tertaut, kita dapat menjalankan fungsi bernilai tabel yang dibuat pada server basis data jarak jauh. Saat Anda mencoba menjalankan fungsi menggunakan server Tertaut, kesalahan berikut terjadi:

Msg 4122, Level 16, State 1, Line 28Panggilan fungsi bernilai tabel jarak jauh tidak diizinkan.

Oleh karena itu untuk menjalankan fungsi apa pun di server jauh, kita perlu menggunakan kata kunci OPENQUERY. Ini digunakan untuk menginisialisasi kueri terdistribusi ad hoc menggunakan server tertaut. Lihat artikel ini untuk memahami konsep OPENQUERY.

Untuk menggunakan OPENQUERY, kita perlu mengaktifkan parameter konfigurasi lanjutan bernama “Kueri Terdistribusi Ad Hoc ” pada server sumber dan tujuan. Jalankan kode berikut untuk mengaktifkannya.

GUNAKAN MASTERGOEXEC SP_CONFIGURE 'SHOW ADVANCED OPTION', 1RECONFIGURE WITH OVERRIDEEXEC SP_CONFIGURE 'AD HOC DISTRIBUTED QUERIES', 1RECONFIGURE WITH OVERRIDE

Sekarang saya ingin mengisi daftar pelanggan, yang terletak di Inggris Raya dan memasukkannya ke dalam “Pelanggan " meja. Seperti yang saya sebutkan, fungsi menerima nama negara untuk memfilter catatan. Sekarang, kita perlu menjalankan skrip berikut di server Tujuan (SQL_VM_2 ) untuk mengisi daftar pelanggan yang berlokasi di “Britania Raya”.

SELECT CUSTOMER_NAME, PHOENNUMBER, EMAILADDRESS, ADDRESS, CITY, COUNTRY, POSTALCODE FROM OPENQUERY([TTI609-VM2], 'DECLARE @COUNTRY VARCHAR(150)SET @COUNTRY=''UNITED KINGDOM'' SELECT * FROM [ADVENTUREWORKS2014] .DBO.GETCUSTOMERBYCOUNTRY(''''+ @COUNTRY +'''')' )

Outputnya terlihat sebagai berikut:

Sekarang, untuk menyisipkan data yang diisi oleh dalam tabel “Pelanggan”, jalankan skrip berikut di server tujuan (SQL_VM_2 ).

MASUKKAN KE PELANGGAN (NAMA_PELANGGAN, NOMOR TELEPON, ALAMAT EMAIL, ALAMAT, KOTA, NEGARA, KODE POS)PILIH NAMA_PELANGGAN, NOMOR PHOEN, ALAMAT EMAIL, ALAMAT, KOTA, NEGARA, KODE POS DARI OPENQUERY ([TTI609-VM2], @('DECVARCVA2) 150)SET @COUNTRY=''UNITED KINGDOM'' SELECT * FROM [ADVENTUREWORKS2014].DBO.GETCUSTOMERBYCOUNTRY(''''+ @COUNTRY +'''')' )/*Output*/(1913 baris terpengaruh) 

Sekarang mari kita verifikasi apakah data telah dimasukkan dengan benar. Untuk memeriksa, jalankan kueri berikut di server Tujuan (SQL_VM_2).

GUNAKAN DEMODATABASEGOSELECT TOP 20 CUSTOMER_NAME, NOMOR TELEPON, EMAILADDRESS, ALAMAT, KOTA, NEGARA, KODE POS DARI PELANGGAN

Outputnya terlihat sebagai berikut:

Ringkasan

Dalam artikel ini saya telah membahas:

  1. Pernyataan “Sisipkan Ke” dan penggunaannya.
  2. Cara menyimpan output fungsi bernilai tabel dalam tabel SQL.
  3. Cara menyimpan output fungsi bernilai tabel ke tabel SQL yang terletak di server jauh menggunakan Server Tertaut.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bergabunglah dengan kami di Las Vegas untuk SQLintersection dan hemat $100

  2. Cara Menggunakan DISTINCT dalam SQL

  3. Cara Menginstal Klien SQL SQuirrel

  4. Cara Menggunakan Klausa Kumpulkan Massal PL/SQL Dengan Pernyataan FETCH INTO

  5. SQL Self Gabung