2015-11-16 53 views
0

我有一個包含兩個執行sql任務後面跟着大量DFT的包。第一種說法是:SSIS傳遞一個變量來執行sql任務(創建表參數)

select CAST(floor(rand()*1000)+1 AS INT) AS SeqVar 

並且具有ResultSet單行 - 這是完美的。它給我一個介於1和1000之間的隨機數,並將該值傳遞給我稱爲SeqVar的變量。 (我也驗證了這個工程)

我遇到的問題是我的第二個執行SQL任務,我嘗試使用從第一執行SQL teask輸出的SeqVar變量如下面的語句中的參數:

IF OBJECT_ID('tempdb.dbo.[##temp1]') IS NOT NULL 
DROP TABLE [##temp1] 

CREATE TABLE [##temp1] (
[RecID] int IDENTITY(?,1), 
[Name] VARCHAR(30), 
[ABA] VARCHAR(10), 
[Account] VARCHAR(20), 
[Type] VARCHAR(1), 
[Date] date, 
[Amount] money 
); 

在參數映射我有SeqVar變量名,方向是輸入,數據輸入數字,參數名稱是0,和參數大小爲1000

我得到的值必須去的地方我有「 ?」在創建tempdb語句中。我試圖讓我的代碼從一個隨機數開始,然後遞增1.

我知道這可能會更容易與一個腳本任務,但該工具是在我的機器上(怪異的dts管道錯誤)打破。在此先感謝,這是所有SSIS 2008.

+0

參數不會這樣的。你需要用一個字符串中的表達式來烹飪,然後運行字符串。腳本任務也在我的機器上被破壞!這似乎很不可靠。 –

+0

解決方案:保存變量中存儲的隨機數,並在創建臨時表時將RecID設置爲IDENTITY(1,1)。然後在派生列中,我有@SeqVar + RecID。因此,每一行進入RecID迭代並被添加到隨機數。感謝您的所有意見,非常感謝! – Tweaver

回答

0

以這種方式使用身份似乎是一個奇怪的解決方案,只是以一些隨機值開始序列。參數格式爲?絕對不在SQL中的上下文中工作。

但是,如果方法是給定的,另一種管理方法是使用一個表達式來設置SQL任務的整個代碼,在該表達式中將值作爲簡單字符串並置,然後運行結果字符串。

0

做得更好創建表像之下,然後使用RESEED屬性將它設置爲你的隨機變量值」

IF OBJECT_ID('tempdb.dbo.[##temp1]') IS NOT NULL 
DROP TABLE [##temp1] 

    CREATE TABLE [##temp1] (
    [RecID] int IDENTITY(1,1), 
    [Name] VARCHAR(30), 
    [ABA] VARCHAR(10), 
    [Account] VARCHAR(20), 
    [Type] VARCHAR(1), 
    [Date] date, 
    [Amount] money 
    ); 

    DECLARE @RANDOM_VALUE INT = 50 
    DBCC CHECKIDENT('##TEMP1',RESEED,@RANDOM_VALUE)