jak przekazać parametry do źródła ado.net w ssis?
To jest oryginalne zapytanie, które działa poprawnie przy użyciuado.net
źródło i korzystanie z dostawców .net dostawca danych ODC określony wewnątrz źródła.
SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT
FROM gyv2M.DDM_ACCT_STRUC a
INNER JOIN
(SELECT max(DDM_ACCT_STRUC_TP) as DDM_ACCT_STRUC_TP, FA_CLNT_ID
FROM gyv2M.DDM_ACCT_STRUC
WHERE FA_DM_ROW_DT <= '6/30/2011' AND DM_ROW_E_DT <= '6/30/2011'
GROUP BY FA_CLNT_ID) b
ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= '6/30/2011' AND a.DM_ROW_E_DT <= '6/30/2011'
ale muszę go zautomatyzować dla tej DATE pobierającej wartość z tabeli w serwerze sql. Stworzyłem zmienną do przechowywania tej wartości daty, ale chcę użyć tej zmiennej jako parametru do przekazania do powyższego zapytania. Niestety nie znalazłem trybu dostępu do danych: komenda sql ze zmiennej w źródle ado.net. Wyszukałem kilka innych stron i odkryłem, że możemy użyć jakiegoś wyrażenia za pomocą budowniczego wyrażeń. rt kliknij na preperties ..> wyrażenia ..> etc .. pomyślnie ocenił wyrażenia. wyraz wygląda jak poniżej, ale zostałem tam uderzony. Co jest następne ? Jak przekazać wyliczone wyrażenie jako polecenie źródłowe w źródle ado.net? Proszę pomóż.
SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT
FROM gyv2M.DDM_ACCT_STRUC a
INNER JOIN
(SELECT max(DDM_ACCT_STRUC_TP) as DDM_ACCT_STRUC_TP, FA_CLNT_ID
FROM gyv2M.DDM_ACCT_STRUC
WHERE FA_DM_ROW_DT <= '@[User::RepDate]' AND DM_ROW_E_DT <= '@[User::RepDate]'
GROUP BY FA_CLNT_ID) b
ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= '@[User::RepDate]' AND a.DM_ROW_E_DT <= '@[User::RepDate]'
Aktualizacja
Cześć,
Dziękuję bardzo za odpowiedź. Jak już określiłem, stworzyłem zmienną użytkownika: RepDate z datetime i wykonywalne zadanie sql, które przypisuje datetime do tej zmiennej RepDate. A także Tak, jestem w stanie ocenić wyrażenie i byłem w stanie zobaczyć zapytanie zbudowane w trybie komend ado.net souce sql. oto zapytanie:
SELECT a.FA_CLNT_ID, a.FA_ACCT_NM, a.ACCT_E_DT, a.POL_PER_CURR_DT, a.POL_PER_NEXT_DT, a.FA_ACCT_NUM, a.GRP_SALES_OFFC_CD, a.ACCT_C_DT
FROM gyv2M.DDM_ACCT_STRUC a
INNER JOIN
(SELECT max(DDM_ACCT_STRUC_TP) as DDM_ACCT_STRUC_TP, FA_CLNT_ID
FROM gyv2M.DDM_ACCT_STRUC
WHERE FA_DM_ROW_DT <= @[User::RepDate] AND DM_ROW_E_DT <= @[User::RepDate]
GROUP BY FA_CLNT_ID) b
ON a.DDM_ACCT_STRUC_TP = b.DDM_ACCT_STRUC_TP AND a.FA_CLNT_ID = b.FA_CLNT_ID AND FA_DM_ROW_DT <= @[User::RepDate] AND a.DM_ROW_E_DT <= @[User::RepDate]
Ale otrzymuję następujący błąd podany poniżej. Myślę, że to dlatego, że wewnętrzne zapytanie oczekuje formatu daty „mm / dd / rrrr”, tak jak to określiłem w pierwotnym zapytaniu… ale podajemy datetime ze zmiennej użytkownika. Czy możesz mi powiedzieć, jak przekonwertować format daty i godziny zmiennej użytkownika na określony format, korzystając z wbudowanych funkcji. Próbowałem DT_DAte, ale nie miałem szczęścia.
Error at Data Flow Task 4 [ADO NET Source [1]]: The component "ADO NET Source" (1) was unable to retrieve column information for the SQL command. The following error occurred: ERROR [42601] [IBM][CLI Driver][DB2] SQL0104N An unexpected token "[" was found following "". Expected tokens may include: "CONCAT || / MICROSECONDS MICROSECOND SECONDS SECOND MINUTES". SQLSTATE=42601
ADDITIONAL INFORMATION:
Pipeline component has returned HRESULT error code 0xC02020FF from a method call. (Microsoft.SqlServer.DTSPipelineWrap)
BUTTONS:
OK
*** Aktualizacja 2 ***
TYTUŁ: Microsoft Visual StudioBłąd w zadaniu przepływu danych [ADO NET Source [1]]: Komponent „ADO NET Source” (1) nie był w stanie pobrać informacji o kolumnie dla polecenia SQL. Wystąpił następujący błąd: BŁĄD [22007] [IBM] [Sterownik CLI] [DB2] SQL0180N Składnia reprezentacji ciągu wartości daty-godziny jest niepoprawna. SQLSTATE = 22007
DODATKOWE INFORMACJE:
Komponent potoku zwrócił kod błędu HRESULT 0xC02020FF z wywołania metody. (Microsoft.SqlServer.DTSPipelineWrap)
GUZIKI:
dobrze