Ich habe ein SSIS-Paket, das eine einfache SELECT
Anweisung ausführt und dann in eine Tabelle lädt. Ich habe die SQL-Anweisung anonymisiert, was schmerzlich offensichtlich sein sollte, wenn Sie sich den Tabellennamen ansehen. Ich habe das Paket auch vereinfacht, um nur eine Zeilenzählung für die Zwecke dieser Demo durchzuführen.
Ich habe das Problem, dass die Abfrage Zeilen in SQL Server erzeugt, aber keine Zeilen in SSIS. Die Abfrage lautet wie folgt.
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)
Bitte ignorieren Sie das *, da dies nur für die Zwecke dieser Demo ist. Die eigentliche Abfrage hat das gleiche Problem, obwohl sie nicht das * hat. Bei Ausführung in SQL Server wird erwartungsgemäß 1 Zeile aus der Kalendertabelle zurückgegeben. Bei Ausführung in derselben Umgebung in SSIS werden jedoch keine Zeilen zurückgegeben.
Wenn ich die Abfrage in eine gespeicherte Prozedur verwandle und den Sproc in SSIS ausführe, erhalte ich eine Zeilenanzahl von 1.
Wenn ich die Abfrage dazu ändere.
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)
Dann erhalte ich noch einmal 1 Zeile.
Gibt es einen Grund, warum ich dieses Verhalten sehe?
UPDATE: Bevor ich dafür eine Menge Flack bekomme, habe ich keine Wahl für den NOLOCK-Unsinn.