我有一個SQL Server集成服務項目,它使用SQL命令作爲數據訪問模式使用OLE DB源查詢SQL Server 2005數據庫。SQL Server集成服務 - 向SQL語句添加參數
我想參數化我的SQL查詢,但語法不是@PARAM,當我嘗試使用?並點擊參數我得到一個錯誤,說「參數不能從SQL命令中提取」。
我做這樣的事情
SELECT * FROM [dbo].[TabledValuedFunction] (?)
我有一個SQL Server集成服務項目,它使用SQL命令作爲數據訪問模式使用OLE DB源查詢SQL Server 2005數據庫。SQL Server集成服務 - 向SQL語句添加參數
我想參數化我的SQL查詢,但語法不是@PARAM,當我嘗試使用?並點擊參數我得到一個錯誤,說「參數不能從SQL命令中提取」。
我做這樣的事情
SELECT * FROM [dbo].[TabledValuedFunction] (?)
它看起來像OLEDB連接不會與它需要來確定參數的數據類型等,因此它不能正確解析出一切供應SSIS它應該是什麼(這是我的猜想)。由於錯誤消息提示,您可以使整個SQL命令來自一個變量。您需要一個您在數據流之前設置的字符串變量。
您可以在ole db源中使用可變參數來提供動態表,動態條件語句或動態sql語句。通過點擊ole db源,你可以改變數據訪問模式。以下是一些不同類型的訪問模式示例,您可以在其中使用包變量:
參數化表 - 使用表名或視圖名稱變量。然後選擇包含有效表格名稱的變量名稱;
參數化條件語句:使用sql命令。 Sql命令文本將如下所示:Select * From Table where id =?。然後映射你的變量。
變量中的動態sql:使用來自變量的sql命令。然後你可以把你的sql語句放在一個包字符串變量中:Select * From Table
我並不完全確定你想要參數化的東西,所以我給了你一些可能的選項,不幫你解決你的問題。我希望這有幫助。
在創建動態SQL語句時,我使用表達式獲得了更好的運氣。所以在這個假設的情況下,我會創建2個變量Qry1和Qry1Param1。
的Qry1變量中我會使用表達式編輯器創造的東西,看起來像
"SELECT * FROM [dbo].[TabledValuedFunction] where tbl_key = " + @[User::Qry1Param1]
Qry1Param1變量會是這樣的1
。
這樣Qry1計算結果爲
SELECT * FROM [dbo].[TabledValuedFunction] where tbl_key = 1
然後你可以改變OLEDB數據源從變量中使用SQL命令的數據訪問模式和用戶:: Qry1輸入變量。
你是如何設置你的執行sql任務組件的? 我剛剛嘗試過,它工作正常。
這是我使用的功能:
create function test1(@x int)
returns @tbl table (x int)
as begin
while (@x > 0)
begin
insert @tbl values(@x);
set @x-=1;
end;
return;
end;
go
在測試了MSSQL2008,SSIS2008。
我有這個問題,它讓我瘋狂,有些查詢會工作,而其他人會失敗。我的決議是刪除SELECT *,而是明確指定列。在其他一些查詢中,我必須刪除子查詢。基本上,你必須擺弄/簡化你的查詢,直到OLEDB提供者能夠充分解析呈現參數信息所需的所有信息。
爲什麼OLEDB提供程序不能返回更具描述性的錯誤消息,因此人們不必訴諸包變量解決方法????
我明白了,這似乎有點讓人失望! – AJM 2010-01-13 15:33:02
你知道如果我使用DataReader來源會有更多運氣嗎? – AJM 2010-01-13 15:34:02
我有同樣的想法,並嘗試使用DataReader,根本無法使用參數。如果我找到更好的解決方法,我會讓你知道。 – 2010-01-13 15:38:08