Tôi có một gói SSIS đang thực hiện một SELECT
câu lệnh đơn giản và sau đó tải vào một bảng. Tôi đã ẩn danh câu lệnh sql sẽ rất rõ ràng khi bạn nhìn vào tên bảng. Tôi cũng đã đơn giản hóa gói để chỉ đếm số hàng cho mục đích của bản demo này.
Vấn đề này tôi gặp phải là truy vấn tạo ra các hàng trong máy chủ SQL nhưng không tạo ra các hàng nào trong SSIS. Các truy vấn như sau.
DECLARE @CurrentBlahDate DATETIME
SET @CurrentBlahDate = ( SELECT MAX(BlahDate)
FROM dbo.ThisCoolTable SL
WITH ( NOLOCK )
INNER JOIN dbo.ThatCoolTable SLF
WITH ( NOLOCK ) ON SL.CoolID = SLF.CoolID
AND SLF.TypeCode IN (
'ValueA',
'ValueB' ))
SELECT
*
FROM dbo.Calendar
WHERE CAST(BaseDate AS DATE) = CAST(@CurrentBlahDate AS DATE)
Hãy bỏ qua * vì đó chỉ là cho mục đích của bản demo này. Truy vấn thực tế có cùng một vấn đề mặc dù nó không có dấu *. Khi được thực thi trong máy chủ SQL, điều này trả về 1 hàng từ bảng lịch như mong đợi. Tuy nhiên, khi được thực hiện đối với cùng một môi trường trong SSIS, tôi không nhận được hàng nào.
Nếu tôi biến truy vấn thành một thủ tục được lưu trữ và thực thi sproc trong SSIS, tôi sẽ nhận được số hàng là 1.
Nếu tôi thay đổi truy vấn này.
SELECT
*
FROM dbo.Calendar
WHERE CAST(BaseDate AS DATE) = CAST(( SELECT MAX(BlahDate)
FROM dbo.ThisCoolTable SL
WITH ( NOLOCK )
INNER JOIN dbo.ThatCoolTable SLF
WITH ( NOLOCK ) ON SL.CoolID = SLF.CoolID
AND SLF.TypeCode IN (
'ValueA',
'ValueB' )) AS DATE)
Sau đó tôi lại nhận được 1 hàng.
Có bất kỳ lý do tôi đang thấy hành vi này?
CẬP NHẬT: Trước khi tôi nhận được một tấn flack cho điều này, tôi không có lựa chọn nào về NOLOCK vô nghĩa.