Błąd 0xC0202009 występuje, gdy parametr ma SSIS oddanych w programie SQL Server

Objawy

Podczas uruchamiania pakietu Microsoft SQL Server Integration Services (SSIS), wykonanie nie powiedzie się z powodu błędu cast parametr i zostanie wyświetlony następujący komunikat o błędzie:

Kod: 0xC0202009
Źródłowych: Zadanie przepływu danych
Opis: Kod błędu SSIS — DTS_E_OLEDBERROR. Wystąpił błąd OLE DB. Kod błędu: 0x80040E21.
Rekord OLE DB jest dostępna.  Źródło: "Microsoft SQL Server Native Client 11.0"
HRESULT: 0x80040E21 opis: "nieprawidłowy znak wartości dla specyfikacji obsady".


Dla składnika OLE DB źródła gdy masz zadanie przepływu danych, który zawiera kwerendę parametryczną, może wystąpić ten problem. Na przykład masz następujące zapytanie:SELECT mydate FROM dbo.myTable
WHERE mydate >= convert (char, dateadd(year,-1,cast( ? as datetime)))
Uwaga: Ten problem występuje tylko, jeśli użytkownik próbuje użyć składnika OLE DB źródła wraz z parametrów w ciągu kwerendy. Znacznik parametru "?" jest mapowany do SSIS użytkownika zmiennej parametr1 jest określony jako ciąg SSIS "20080122." Ten problem występuje dla pakietów migracji w Microsoft SQL Server 2005 lub nowszy.

Przyczyna

Ten problem występuje z powodu zmiany zachowania w jak OLE DB obsługuje parametry. W systemie Microsoft SQL Server 2012, nowe procedury przechowywanej sp_describe_undeclared_parameters, wymiana zestawu fmtonly zwraca różne wyniki dla typu parametru. Ta zmiana jest zgodne z projektem.

Na przykład kwerendy w sekcji "Symptomy" oryginalne zachowanie ma opisać "?" za "char(8)." Jednak nowy sp_describe_undeclared_parameters mówi, że "?" powinno być "datetime". W związku z tym wewnętrznego cast z ciągu daty i godziny , który jest obsługiwany przez dostawcę OLE DB zwraca komunikat o błędzie.

Rozwiązanie

Aby rozwiązać ten problem, należy zmodyfikować kwerendę, aby dodać dodatkowe wyraźne oddanych do oryginalnego typu danych. Następnie sp_describe_undeclared_parameters zwraca odpowiednie, oczekiwanego typu. Aby rozwiązać ten problem w kwerendzie przykład, opisaną w sekcji "Symptomy", należy zaktualizować kwerendy w następujący sposób:SELECT mydate FROM dbo.myTable
WHERE mydate >= convert(char ,dateadd(year,-1, cast( cast( ? as char(8)) as datetime)))

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×