2009-05-05 5 views
5

Sử dụng SQL Server 2005 và Visual Studio 2005, tôi đang cố gắng tạo một gói SSIS để hợp nhất dữ liệu từ 1 bảng thành nhiều các bảng khác.Sử dụng SSIS để ánh xạ các giá trị được mã hóa cứng như một phần của di chuyển bảng một đến nhiều trong Visual Studio

Bảng nguồn không có nhiều trường mà bảng đích thực hiện. Ví dụ: các trường 'CreatedBy' và 'CreatedDate'. Tôi muốn các mã này được mã hóa cứng (theo nghĩa) như là một phần của quá trình nhập gói.

Vấn đề không biết phải sử dụng cái gì để tạo điều kiện ánh xạ này. Như là một điểm khởi đầu nó sẽ được chấp nhận để có một mã hóa cứng '1' và GetDate() cho createdBy và createDate tương ứng.

Tab "Bản đồ đầu vào và đầu ra" hoặc "Cột ánh xạ" trên hộp thoại tùy chọn "Trình chỉnh sửa nâng cao cho đích" không có hỗ trợ rõ ràng để ánh xạ giá trị "mặc định" như GetDate().

Bất kỳ đề xuất nào về cách đạt được điều này?

+0

Tôi viết SQL để lấy dữ liệu ra khỏi các bảng nguồn. Trong SQL nguồn của tôi, tôi chỉ định tất cả các cột bị thiếu để chúng khớp nhau. Tôi không thể nói đó là cách hiệu quả nhất để hoàn thành nhiệm vụ, nhưng nó có vẻ hiệu quả với tôi. – JJO

Trả lời

8

Cách SSIS để tạo cột mới (có giá trị tĩnh hay không) là sử dụng phép biến đổi "Có nguồn gốc cột" trong luồng dữ liệu của bạn, giữa nguồn và đích.

Điều này cho phép bạn chỉ định các cột bổ sung và giá trị của chúng bằng cách sử dụng biểu thức. Đối với ngày/giờ hiện tại, sử dụng Getdate() làm biểu thức và đặt kiểu dữ liệu thành "date (DT_DATE)". Để mã cứng một giá trị, hãy báo giá trị kép trong biểu thức (ví dụ: "1") và chỉ định loại dữ liệu có liên quan.

+1

Tuyệt vời, cảm ơn đã làm việc một say mê. –

+2

Lưu ý: Các cột không có nguồn gốc sẽ chỉ chuyển thẳng qua khối chuyển đổi "Có nguồn gốc", tức là từ nguồn của bạn đến đích của bạn. (SSIS trong SQL Server 2008). – ryan

3

Thay vì sử dụng Bảng làm nguồn, cách chỉ định truy vấn cụ thể? Bằng cách đó, bạn có thể định nghĩa tĩnh các giá trị như một phần của nguồn.

ví dụ:

SELECT id, fieldOne, fieldTwo, '1' AS createdBy, GetDate() AS createdDate 
FROM SourceTable 

Tôi đã thực hiện chính xác điều này gần đây.

Một điều quan trọng cần nhớ là bạn cần đảm bảo kiểu dữ liệu phù hợp. Tôi đã có một vài vấn đề với các loại dữ liệu chuỗi không phù hợp (UTF-8 và tương tự).

+0

+1 cho đề xuất tốt, nhưng điều này chỉ hoạt động nếu bạn định nghĩa truy vấn là nguồn và nguồn là nguồn 'SQL'. Bạn không thể làm điều này nếu bạn đã xác định 'Bảng hoặc Chế độ xem' là 'Chế độ truy cập dữ liệu' trong Nguồn OLE DB chẳng hạn, mặc dù tất nhiên bạn có thể sử dụng kỹ thuật của mình nếu nguồn là Chế độ xem mà bạn có thể sửa đổi Bạn không thể làm điều này cho một nguồn tập tin như FlatFile. – rohancragg