[英]SSIS Excel Source error: [Excel Source [1]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005
[英]SSIS An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005, The metadata could not be determined
盡管我已經為結果集提供了動態 SQL,但我收到以下錯誤。但它要求相同。
OLE DB 記錄可用。 來源:“Microsoft SQL Server Native Client 11.0” Hresult:0x80004005 描述:“無法確定元數據,因為語句‘EXEC sp_executesql @ExecSQL’包含動態 SQL。考慮使用 WITH RESULT SETS 子句顯式描述結果集。”。
錯誤:0xC0202080 在攝取 CSV 文件 - 流,OLE DB 命令 1 [281]:無法從 SQL 命令的參數中檢索目標列描述。
下面的代碼在 MS SQL Management Studio 查詢中運行良好。 但它在 SSIS 中給出了錯誤
DECLARE @tablename nvarchar(200), @tablevalue nvarchar(1)
SELECT @tablename =CAST(FLOOR(RAND()*(100000-5+1)+5) as nvarchar)
Select @tablevalue='0'
DECLARE @ExecSQL NVARCHAR(max)
SET @ExecSQL = 'SELECT d.tablename, d.tablevalue INTO mws_ssis_cust_senti_integration'+ @tablename+
+ ' from ( select ''' + 'mws_ssis_cust_senti_integration' + @tablename + ''' as tablename, ''' + @tablevalue + ''' as tablevalue ) as d '
EXEC sp_executesql @ExecSQL
Set @tablename = N'mws_ssis_cust_senti_integration'+ cast(@tablename as nvarchar)
Set @ExecSQL = 'select * from ' + @tablename
EXEC sp_executesql @ExecSQL
WITH RESULT SETS
(
(
tablename varchar(max), tablevalue varchar(1)
)
)
參考官方文檔:
OLE DB 命令轉換為數據流中的每一行運行 SQL 語句。 例如,您可以運行 SQL 語句來插入、更新或刪除數據庫表中的行。
它不用於 select 語句。 我認為您正在尋找Execute SQL Task或OLE DB Source with SQL Command access mode or Lookup transformation 。
您可以將查詢結果存儲在類型為 object 的 SSIS 變量中。有很多文章說明了這個過程:
請注意,如果您在 SSIS 中有 @tablename 和 @tablevalue 變量,則可以使用表達式以更簡單的方式構建此語句並在以后執行它。
您可以使用 OLE DB 源從類似的命令生成行,您可以檢查以下答案,因為它提供了一些有關在 OLE DB 源中使用結果集的有用信息:
此外,您可以查看以下文章以獲取一些有用的信息:
我不確定它是否支持類似的查詢,但您可以在以下鏈接中閱讀有關此組件的更多信息:
您是否嘗試過將整個語句包裝在存儲過程中,然后從 SSIS 調用該存儲過程?
純粹是在黑暗中拍攝,但在過去,當我將復雜的 sql 語句,尤其是那些涉及創建臨時表的語句,從 SSMS 移到生產環境(例如,在應用程序或 ssrs 報告中)時,查詢會因不清楚而失敗原因。 一旦我將實際的 sql 移動到 sp 中,錯誤就會神奇地消失,對查詢的實際機制進行 0 次更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.