Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

SQL nâng cao:Các biến thể và các trường hợp sử dụng khác nhau của câu lệnh chèn T-SQL

Trong bài viết trước của tôi, tôi đã chứng minh:

  1. Chèn đầu ra của hàm có giá trị bảng trong bảng SQL.
  2. Chèn đầu ra của hàm có giá trị bảng được tạo trên máy chủ cơ sở dữ liệu từ xa.

Trong bài viết này, tôi sẽ chứng minh:

  1. Sao chép dữ liệu giữa hai bảng, được tạo trong một giản đồ khác.
  2. Sao chép dữ liệu giữa hai bảng, được tạo trong các cơ sở dữ liệu khác nhau trên cùng một máy chủ.
  3. Sao chép dữ liệu giữa hai bảng được tạo, trong các cơ sở dữ liệu khác nhau chứa máy chủ khác nhau (Truy vấn máy chủ chéo)

Chuyển dữ liệu giữa hai bảng được tạo trong một giản đồ khác.

Để sao chép dữ liệu giữa hai bảng được tạo trong một lược đồ khác, chúng ta phải sử dụng cú pháp sau:

 INSERT INTO .  (COLUMN1, COLUMN2, COLUMN3 ..) CHỌN COLUMN1, COLUMN2, COLUMN3 TỪ .  

Để trình diễn, tôi sẽ sử dụng WideWorldImportors cơ sở dữ liệu. Tôi muốn sao chép tất cả hồ sơ từ [Ứng dụng]. [Mọi người] bảng vào [dbo]. [Nhân viênWithoutLogonName] bảng có LOGONNAME bằng ” KHÔNG LOGON . ”

Trước tiên, Hãy xem lại dữ liệu từ [Ứng dụng]. [Mọi người] bàn. Để làm điều đó, hãy thực hiện truy vấn sau:

 CHỌN [PERSONID], [FULLNAME], [PREFERREDNAME], [SEARCHNAME], [LOGONNAME], [PHONENUMBER], [FAXNUMBER], [EMAILADDRESS] FROM APPLICATION.Posystem WHERE LOGONNAME ='KHÔNG ĐĂNG NHẬP' 

Sau đây là ảnh chụp màn hình của đầu ra:

Bây giờ, hãy tạo [dbo]. [Nhân viênWithoutLogonName] bàn. Để làm điều đó, hãy thực hiện truy vấn sau:

 TẠO BẢNG 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)) 

Bây giờ, hãy để chúng tôi sao chép hồ sơ từ [Ứng dụng]. [Mọi người] tới [dbo]. [Nhân viênWithoutLogonName] . Để làm điều đó, hãy thực hiện truy vấn sau:

 CHÈN VÀO [DBO]. [EMPLOYEESWITHOUTLOGONNAME] ([FULL_NAME], [PREFERRED_NAME], [SEARCH_NAME], [LOGON_NAME], [PHONE_NUMBER], [FAX_NUMBER], [EMAIL_ADDRESS]) CHỌN [FULLNAME], [PREFERREDNAME], [PREFERREDNAME] [SEARCHNAME], [LOGONNAME], [PHONENUMBER], [FAXNUMBER], [EMAILADDRESS] FROM APPLICATION.Posystem WHERE LOGONNAME ='KHÔNG ĐĂNG NHẬP' 

Sau khi dữ liệu được chèn, hãy thực hiện truy vấn sau để xác minh rằng dữ liệu đã được sao chép.

 CHỌN * TỪ EMPLOYEESWITHOUTLOGONNAME 

Sau đây là kết quả:

Sao chép dữ liệu giữa hai bảng, được tạo trong một cơ sở dữ liệu khác

Như tôi đã giải thích ở trên, chúng ta có thể sao chép dữ liệu giữa các bảng được tạo trong hai lược đồ khác nhau. Tương tự, chúng ta có thể sao chép dữ liệu giữa hai bảng được tạo trong hai cơ sở dữ liệu khác nhau. Để sao chép dữ liệu giữa hai cơ sở dữ liệu, người dùng phải có “ db_datareader Quyền ”trên cơ sở dữ liệu nguồn và“ db_datawriter ”Trên cơ sở dữ liệu đích.

Sau đây là cú pháp:

 INSERT INTO . .  (COLUMN1, COLUMN2, COLUMN3 ..). 

Bây giờ để chứng minh, tôi đã tạo một cơ sở dữ liệu mới có tên là “HR”. Để tạo cơ sở dữ liệu, hãy thực hiện lệnh sau.

 TẠO NHÂN SỰ CƠ SỞ DỮ LIỆU 

Bây giờ, tôi muốn sao chép dữ liệu của Tên người dùng không có nhân viên bảng, được tạo trong WideWorldImportors cơ sở dữ liệu cho “ Nhân viên ”Được tạo trong bảng HR cơ sở dữ liệu.

Trước tiên, hãy tạo một bảng có tên “ Nhân viên ”Trong HR cơ sở dữ liệu. Để làm điều đó, hãy thực hiện truy vấn sau:

 SỬ DỤNG NHÂN VIÊN TẠO BẢNG HR GO ([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)) 

Bây giờ để sao chép dữ liệu từ “ Tên nhân viênWithoutLogon ”Vào bảng“ NHÂN VIÊN ”, Hãy để chúng tôi thực hiện truy vấn sau:

 CHÈN VÀO HR.DBO.EMPLOYEES ([FULL_NAME], [PREFERRED_NAME], [SEARCH_NAME], [LOGON_NAME], [PHONE_NUMBER], [FAX_NUMBER], [EMAIL_ADDRESS]) CHỌN FULL_NAME, PREFERRED_NAME, SEARCH_NAME, LOGON_NAME, PHONE_NUMBER FAX_NUMBER, EMAIL_ADDRESS FROM WIDEWORLDIMPORTERS.DBO.EMPLOYEESWITHOUTLOGONNAME 

Sau khi dữ liệu được chèn, hãy thực hiện truy vấn sau để xác minh rằng dữ liệu đã được sao chép.

 CHỌN * TỪ HR.DBO.EMPLOYEES 

Sau đây là kết quả:

Sao chép dữ liệu giữa hai bảng, được tạo trong các cơ sở dữ liệu khác nhau trên các máy chủ khác nhau

Bây giờ, tương tự, chúng ta có thể sao chép dữ liệu giữa hai bảng được tạo trên hai cơ sở dữ liệu riêng biệt được tạo trên hai máy chủ khác nhau. Điều này có thể được thực hiện bằng cách sử dụng Máy chủ được liên kết hoặc OPENROWSET từ khóa.

Sau đây là cú pháp để kết nối cơ sở dữ liệu SQL được tạo trên máy chủ từ xa bằng Máy chủ được Liên kết.

 INSERT INTO . . .  (COLUMN1, COLUMN2, COLUMN3 ..).> 

Trong bản trình diễn này, tôi sẽ sao chép dữ liệu của Nhân viên bảng được tạo trên cơ sở dữ liệu Nhân viên sang cơ sở dữ liệu SQL được tạo trên đám mây Azure. Để làm điều đó, trước tiên hãy tạo cơ sở dữ liệu trên Azure SQL Instance. Tôi đã tạo nhóm tài nguyên máy chủ SQL có tên “ companyemployees.database.windows.net.

Bây giờ để tạo cơ sở dữ liệu nhân sự trên phiên bản cơ sở dữ liệu Azure, hãy mở studio quản lý SQL Server. Trong hộp văn bản tên máy chủ, hãy chọn “companyemployees.database.windows.net.” Chúng tôi sẽ sử dụng xác thực SQL Server để kết nối phiên bản SQL. Để làm điều đó, hãy chọn “Xác thực máy chủ SQL” trong hộp thả xuống loại xác thực. Cung cấp tên người dùng và mật khẩu thích hợp và nhấp vào kết nối. Xem ảnh chụp màn hình sau.

Bây giờ để tạo “ Cloud_HR_DB ”Cơ sở dữ liệu, Nhấn Ctrl + N để mở cửa sổ trình soạn thảo truy vấn và thực hiện lệnh sau.

 TẠO CƠ SỞ DỮ LIỆU CLOUD_HR_DB ĐI 

Xem hình ảnh sau đây.

Sau khi cơ sở dữ liệu được tạo, hãy thực thi truy vấn sau để tạo “ c Nhân viên ”Trên Cloud_HR_DB cơ sở dữ liệu. Để làm điều đó, hãy thực hiện truy vấn sau trong HR cơ sở dữ liệu.

 TẠO BẢNG CEMPLOYEES ([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)) 

Khi cơ sở dữ liệu và bảng được tạo, chúng ta cần tạo một máy chủ được liên kết để thực hiện truy vấn giữa các máy chủ. Để tạo một máy chủ được liên kết giữa phiên bản máy chủ SQL cục bộ và phiên bản máy chủ Azure SQL, hãy thực thi lệnh sau trên phiên bản máy chủ SQL cục bộ.

 SỬ DỤNG [MASTER] GO EXEC MASTER.DBO.SP_ADDLINKEDSERVER @SERVER =N'AZURE_SQL_SERVER ', @ SRVPRODUCT =N' ', @ PROVIDER =N'SQLNCLI', @ DATASRC =N'COMPANYEMPLOYEES.DATABASE.WINDOWS.NET ' . 'FALSE', @ LOCALLOGIN =NULL, @ RMTUSER =N'NISARGUPADHYAY ', @RMTPASSWORD =' ######## 'GO EXEC MASTER.DBO.SP_SERVEROPTION @ SERVER =N'AZURE_SQL_SERVER', @ OPTNAME =N ' TRUY CẬP DỮ LIỆU ', @ 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 HEMA VALIDATION ', @ OPTNAME =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'REMOTE PROC GIAO DỊCH KHUYẾN MÃI', @ OPTVALUE =N'TRUE 'ĐI 

Sau khi máy chủ được liên kết được tạo, hãy cho phép xuất dữ liệu của Nhân viên bảng, được tạo trên phiên bản cục bộ của máy chủ SQL cho cE Employees bảng được tạo trên Azure SQL Server Instance. Để làm điều đó, hãy thực thi truy vấn sau trên phiên bản SQL Server cục bộ:

 CHÈN VÀO [AZURE_SQL_SERVER] .Cloud_HR_DB.DBO.cEMPLOYEES ([FULL_NAME], [PREFERRED_NAME], [SEARCH_NAME], [LOGON_NAME], [PHONE_NUMBER], [FAX_NUMBER], [EMAIL_ADDRESS]) CHỌN FULL_NAME, PREFARCHED_NAME, PREFARCHED_NAME LOGON_NAME, PHONE_NUMBER, FAX_NUMBER, EMAIL_ADDRESS FROM HR..EMPLOYEES 

Sau khi dữ liệu được xuất từ ​​một phiên bản cục bộ sang Azure Instance, hãy thực hiện truy vấn sau để xác minh rằng dữ liệu đã được sao chép.

 CHỌN * TỪ [AZURE_SQL_SERVER] .Cloud_HR_DB.DBO.cEMPLOYEES 

Sau đây là kết quả:

Chúng tôi cũng có thể sao chép dữ liệu vào một máy chủ từ xa mà không cần sử dụng Máy chủ được Liên kết. Để làm được điều đó, chúng ta phải sử dụng từ khóa OPENROWSET. OPENROWSET là một phương pháp đặc biệt để kết nối và truy cập nguồn dữ liệu từ xa bằng OLEDB. Để đọc thêm về OPENROWSET, hãy tham khảo tài liệu của Microsoft về OPENROWSET.

Bây giờ trong ví dụ sau, tôi sẽ sao chép dữ liệu từ cE Employees bảng được tạo trên Cloud_HR_DB cho Nhân viên cơ sở dữ liệu được tạo trên phiên bản cục bộ. Chúng tôi sẽ chỉ sao chép những bản ghi có Email_Address như ” contoso.com.

Bây giờ để sao chép dữ liệu, hãy tạo một bảng có tên “ ContosoEprisees ”Trong“ HR ”Cơ sở dữ liệu. Để làm điều đó, hãy thực hiện truy vấn sau:

 TẠO BẢNG [DBO]. [CONTOSOEMPLOYEES] ([ID] [INT] IDENTITY (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) KHÔNG ĐỦ) ĐI 

Bây giờ để chèn dữ liệu bằng OPENROWSET, chúng tôi cần bật “ truy vấn phân tán Ad Hoc ”Tùy chọn nâng cao. Để làm điều đó, hãy thực hiện lệnh sau.

 EXEC SP_CONFIGURE 'HIỂN THỊ CÁC TÙY CHỌN NÂNG CAO', 1 HÌNH ẢNH CÓ BÊN NGOÀI. 

Bây giờ để sao chép dữ liệu từ cE Employees bảng của Cloud_HR_DB (Azure Instance) cơ sở dữ liệu đến “ ContosoE Employees ”Trong“ Nhân viên ”Cơ sở dữ liệu (Phiên bản cục bộ), thực hiện truy vấn sau trên máy chủ cục bộ:

 SỬ DỤNG HR ĐI CHÈN VÀO CONTOSOEMPLOYEES ([FULL_NAME], [PREFERRED_NAME], [SEARCH_NAME], [LOGON_NAME], [PHONE_NUMBER], [FAX_NUMBER], [EMAIL_ADDRESS]) CHỌN * TỪ OPENROWSET ('SQLNCLI11', 'SERVER =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, EMAIL CONTOSO 'LIKE' LIKE% CONTOS. COM% '' ') A 

Sau khi dữ liệu được xuất từ ​​một phiên bản cục bộ sang Azure Instance, hãy thực hiện truy vấn sau để xác minh rằng dữ liệu đã được sao chép.

 CHỌN FULL_NAME, PREFERRED_NAME, SEARCH_NAME, LOGON_NAME, PHONE_NUMBER, FAX_NUMBER, EMAIL_ADDRESS TỪ CONTOSOEMPLOYEES 

Sau đây là kết quả:

Trong bài viết này, tôi đã giải thích cách:

  1. Sao chép dữ liệu giữa hai bảng được tạo trong một giản đồ khác.
  2. Sao chép dữ liệu giữa hai bảng được tạo trong các cơ sở dữ liệu khác nhau trên cùng một máy chủ.
  3. Sao chép dữ liệu giữa hai bảng được tạo trong các cơ sở dữ liệu khác nhau của máy chủ khác nhau (Truy vấn máy chủ chéo).

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 30 câu hỏi phỏng vấn truy vấn SQL hàng đầu bạn phải thực hành vào năm 2022

  2. Mô hình dữ liệu đại lý bất động sản

  3. Mức độ cô lập đã cam kết đọc

  4. Cách trừ 30 ngày cho một ngày trong T-SQL

  5. Sai lầm về hiệu suất:Các biến bảng luôn ở trong bộ nhớ