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

SSIS - Sử dụng vùng chứa vòng lặp foreach để cập nhật bản ghi sau khi chuyển

Có lẽ, bạn đã tìm thấy câu trả lời cho câu hỏi của mình. Câu trả lời này là để giúp những người khác có thể vấp phải câu hỏi này. Đây là một tùy chọn khả thi có thể được sử dụng để giải quyết việc truyền dữ liệu bằng SSIS. Tôi giả định rằng bạn vẫn có thể tạo chuỗi kết nối trỏ đến cả máy chủ A và B của mình từ gói SSIS. Nếu giả định đó là sai, vui lòng cho tôi biết để tôi có thể xóa câu trả lời này. Trong ví dụ này, tôi đang sử dụng SQL Server 2008 R2 như back-end. Vì tôi không có hai máy chủ, tôi đã tạo hai bảng giống nhau trong các Schemas khác nhau Máy chủA ServerB .

Quy trình từng bước:

  1. Trong Connection manager của SSIS, tạo hai Kết nối OLE DB cụ thể là ServerA ServerB . Ví dụ này trỏ đến cùng một máy chủ nhưng trong trường hợp của bạn, các kết nối sẽ cần trỏ đến hai máy chủ khác nhau của bạn. Tham khảo ảnh chụp màn hình # 1 .

  2. Tạo hai lược đồ ServerAServerB . Tạo bảng dbo.ItemInfo trong cả hai lược đồ. Tạo tập lệnh cho các bảng này được cung cấp trong Tập lệnh tiết diện. Một lần nữa, những đối tượng này chỉ dành cho ví dụ này.

  3. Tôi đã điền vào cả hai bảng với một số dữ liệu mẫu. Bảng ServerA.ItemInfo chứa 2,222 rows và bảng ServerB.ItemInfo chứa 10,000 rows . Theo câu hỏi, thiếu 7.778 các hàng phải được chuyển từ ServerB tới ServerA . Tham khảo ảnh chụp màn hình # 2 .

  4. Trên tab luồng điều khiển của gói SSIS, đặt tác vụ luồng dữ liệu như được hiển thị trong ảnh chụp màn hình # 3 .

  5. Nhấp đúp vào tác vụ luồng dữ liệu để điều hướng đến tab luồng dữ liệu và định cấu hình tác vụ luồng dữ liệu như được mô tả bên dưới. Máy chủ B là một OLE DB Source; Tìm bản ghi trong Máy chủ A là một Lookup transformation task Máy chủ A là một OLE DB Destination .

  6. Định cấu hình OLE DB Source Máy chủ B như được hiển thị trong ảnh chụp màn hình # 4 và # 5 .

  7. Định cấu hình Lookup transformation task Tìm bản ghi trong Máy chủ A như được hiển thị trong ảnh chụp màn hình # 6 - # 8 . Trong ví dụ này, ItemId là khóa duy nhất. Do đó, đó là cột được sử dụng để tìm kiếm các bản ghi bị thiếu giữa hai bảng. Vì chúng tôi chỉ cần các hàng không tồn tại trong Máy chủ A , chúng tôi cần chọn tùy chọn Redirect rows to no match output .

  8. Đặt một OLE DB Destination về tác vụ luồng dữ liệu. Khi bạn kết nối tác vụ chuyển đổi Tra cứu với Đích đến của OLE DB, bạn sẽ được nhắc với Input Output Selection hộp thoại. Chọn Lookup No Match Output từ hộp thoại như được hiển thị trong ảnh chụp màn hình # 9 . Định cấu hình OLE DB Destination Máy chủ A như được hiển thị trong ảnh chụp màn hình # 10 và # 11 .

  9. Sau khi tác vụ luồng dữ liệu được định cấu hình, nó sẽ giống như được hiển thị trong ảnh chụp màn hình # 12 .

  10. Thực hiện mẫu của gói được hiển thị trong ảnh chụp màn hình # 13 . Như bạn có thể nhận thấy, thiếu 7,778 rows đã được chuyển từ Server B tới Server A . Tham khảo ảnh chụp màn hình # 14 để xem số lượng bản ghi bảng sau khi thực hiện gói.

  11. Vì yêu cầu là chỉ chèn các bản ghi còn thiếu, nên phương pháp này đã được sử dụng. Nếu bạn muốn cập nhật các bản ghi hiện có và xóa các bản ghi không còn hợp lệ, vui lòng tham khảo ví dụ mà tôi đã cung cấp trong liên kết. Dịch vụ tích hợp SQL để tải tệp được phân tách bằng tab? Ví dụ trong liên kết cho thấy cách chuyển một tệp phẳng sang SQL nhưng nó cập nhật các bản ghi hiện có và xóa các bản ghi không hợp lệ. Ngoài ra, ví dụ này cũng được tinh chỉnh để xử lý số lượng lớn các hàng.

Hy vọng điều đó sẽ hữu ích.

Tập lệnh

.

CREATE SCHEMA [ServerA] AUTHORIZATION [dbo]
GO

CREATE SCHEMA [ServerB] AUTHORIZATION [dbo]
GO

CREATE TABLE [ServerA].[ItemInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemId] [varchar](255) NOT NULL,
    [ItemName] [varchar](255) NOT NULL,
    [ItemType] [varchar](255) NOT NULL,
    CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
) ON [PRIMARY]
GO

CREATE TABLE [ServerB].[ItemInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemId] [varchar](255) NOT NULL,
    [ItemName] [varchar](255) NOT NULL,
    [ItemType] [varchar](255) NOT NULL,
    CONSTRAINT [PK_ItemInfo] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [UK_ItemInfo_ItemId] UNIQUE NONCLUSTERED ([ItemId] ASC)
) ON [PRIMARY]
GO

Ảnh chụp màn hình # 1:

Ảnh chụp màn hình # 2:

Ảnh chụp màn hình # 3:

Ảnh chụp màn hình # 4:

Ảnh chụp màn hình # 5:

Ảnh chụp màn hình # 6:

Ảnh chụp màn hình # 7:

Ảnh chụp màn hình # 8:

Ảnh chụp màn hình # 9:

Ảnh chụp màn hình # 10:

Ảnh chụp màn hình # 11:

Ảnh chụp màn hình # 12:

Ảnh chụp màn hình # 13:

Ảnh chụp màn hình # 14:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Php gọi tập lệnh cơ sở dữ liệu sao lưu sqlserver, tệp sao lưu được tạo và sau đó xóa

  2. Làm thế nào để Chỉ mục toàn văn của SQL Server thực sự lập chỉ mục các từ trong danh mục?

  3. SQL Server sử dụng CPU cao khi tìm kiếm bên trong chuỗi nvarchar

  4. SQL Server Chèn hàng loạt tệp CSV với dấu ngoặc kép không nhất quán

  5. Nhóm số đóng