2017-07-07 50 views
0

我有一個包含不到一百萬行的表。我正在使用SSIS構建一個表單,要求用戶輸入並使用這些值作爲參數以從源數據構建視圖。我無法讓SSIS從變量創建視圖。從參數/變量動態創建視圖SQL SSIS

這個'工具'的目的是提供一個對話框,它以編程方式構建一個視圖,然後根據通過將執行SSIS包的表單定義的參數進行更新。我的團隊中的一些人員知道0個SQL。因此這規避了任何SQL知識。創建一個完全獨立的應用程序並不理想,因爲它需要我額外的額外開銷,並且會偏離當前使用SSIS/SQL實現類似結果的一些現有流程。

因爲這是我試過/嘗試過的。

我有一個包含一個SSIS包 '執行SQL任務'

這項任務帶來了5個輸入(變量) VAR1,VAR2,VAR3,VAR4,VAR5一種形式。 一些變數是字符串別人是雙打,整數等...(他們都有所不同)

您填充字段並打好。這些變量被傳遞給'執行包任務'。 這個包裏面(包B) 這些變量用在'執行SQL任務'中。

此任務嘗試接受用戶輸入並使用包含4個其他變量的where子句創建視圖。

例如:

Create View ? AS Select col1,col2,col3,col4 WHERE 
col1 = ? 
AND col2 =? 
AND col3 =?......... 

首先,它似乎是使用?在創建視圖中是無效的。 錯誤感:

Error: 0x0 at Build_Query: Incorrect syntax near '@P1'. 
Error: 0xC002F210 at Build_Query, Execute SQL Task: Executing the query "CREATE VIEW ? as Select * from S_t_equip_template 
..." failed with the following error: "The batch could not be analyzed because of compile errors.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established 

correctly. 
Task failed: Build_Query 

如果我使用創建視圖變量作爲表達並取出變量/ paramerters爲,語句,我可以創建視圖沒有問題。 但是,一旦我將它們添加回,語句引發錯誤我試圖評估這些作爲「執行SQL任務」,但這些表達都是各種類型的我得到的錯誤:

[Execute SQL Task] Error: Executing the query " 
CREATE VIEW testing AS SELECT 
P.label,P.uniq..." failed with the following error: "The metadata could not 
be determined because statement 'CREATE VIEW testingagain AS SELECT 
P.label,P.uniqueid,C.label as Child_Label,C.uniqueid as Child_uni' does not 
support metadata discovery.". Possible failure reasons: Problems with the 
query, "ResultSet" property not set correctly, parameters not set correctly, 
or connection not established correctly. 

無想法是怎麼回事。任何幫助,將不勝感激

我GOOGLE了錯誤,發現一些信息,但其他用例是如此不同,以至於很難理解實際的原因或其他解決方法。

AS請求(簡化​​的示例): 我已經創建了一個包變量(數據類型的字符串)被叫:VIEW_NAME

執行SQL任務:

CREATE VIEW @[User::View_Name] AS SELECT 
* from table1 
where col1 = 100; 

具體地它不喜歡,我使用一個變量在這裏。 如果我設置視圖名稱的一切工作,直到:我繼續我的Where子句包含變量。

在我的SQL任務創建一個變量稱爲類型(數據類型INT)

我映射變量/參數

例子:

CREATE VIEW tempTable AS SELECT 
    * from table1 
    where col1 = ?; 

這樣可不行,同樣的錯誤。

如果我嘗試通過我得到以下錯誤

[Execute SQL Task] Error: Executing the query "CREATE VIEW test_45678 AS SELECT P.label,P.uniquei..." failed with the following error: "Must declare the scalar variable "@".". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly. 

通常具有由於與變量不能這種方式計算的表達式或表達式來完成上述內容。我猜我需要逐個評估每件作品,並逐個構建表達。這很好,但非常低效,不可維護。

+0

你能告訴步驟的細節? – artm

+0

@artm更新了示例 – Cjust689

+0

SSIS實際上不是爲交互式使用而構建的,動態SQL通常是數據庫中的最後手段。你爲什麼這樣做?可能有更好的方法。關於你的錯誤:你是否嘗試過在包含完整CREATE VIEW定義的變量中創建一個表達式,然後對其進行評估,然後在SSMS中運行以確認它是否有效,然後使用'SQL From Variable'運行SQL Task –

回答

0

我在嘗試評估我的表情時有一些根本的誤解。具體的語法問題和必須將每個變量轉換爲字符串。 我的SQLStatement變量

ON C.pid = P.ID 
where 
C.width >="+(DT_WSTR, 8)@[User::Width] +"-"+ (DT_WSTR, 8)@[User::Range]+........ 

最終的表達看起來像這樣:

"Create View "[email protected][User::View_Name] + " AS SELECT " + @[User::SQLStatement]