簡而言之,我試圖將用戶輸入,存儲在一個變量中,然後在查詢中使用該變量。帶有用戶變量的SSIS包在哪裏條款
首先,我有一個腳本任務,用一個簡單的輸入文本框和一個按鈕打開一個窗口。點擊後,文本將被放入用戶變量中,彈出消息框以顯示用戶變量中的內容。單擊消息框上的確定關閉消息框和原始窗口。這似乎工作正常。
接下來,我有一個執行SQL任務。設置如下:
一般
- 的ResultSet =無
- ConectionType = OLE DB
- 連接= localhost.DB
- SQLSourceType =直接輸入
- 的SQLStatement = [SQL代碼顯示以下]
參數M apping
- 變量名=用戶::的VarName
- 方向=輸入
- 字段類型字段= VARCHAR
- 參數名稱= 0
- 參數大小= 65535
結果集 - N的/ A
表達式 - N/A
[SQL CODE]
if object_id('TEST.dbo.TEST','U') is not null
drop table TEST.dbo.TEST;
SELECT
coalesce(FSC.a, format(cast(SVY.b as int),'000')) as ab,
SVY.c,
PP.d,
SV1.e,
PP.f,
PP.g,
cast(PP.g as float) AS g,
SV1.h,
SV1.i,
SVY.j,
SVY.k,
format(cast(SVY.l as int), '00000') as l,
CAST(SVY.m AS float) AS m,
SVY.n,
SV1.o,
SVY.p,
cast(PID.q as float) as q,
cast(PID.r as float) as r,
cast(PID.s as float) as s,
cast(PID.t as float) as t,
PID.u as u,
PID.v as v,
PP.w,
CAL_B.x as x,
CAL_B.y as y,
CAL_B.z as z,
CAL_R.aa as aa,
CAL_R.bb as bb,
CAL_R.cc as cc
into TEST.dbo.TEST
FROM AAA.dbo.AAA PP
INNER JOIN BBB.dbo.BBB PPC
ON PP.x = PPC.x
AND cast(PP.x as date) = cast(PPC.x as date)
RIGHT OUTER JOIN CCC.dbo.CCC SVY
ON PPC.x = SVY.x
AND cast(PPC.x as date) = cast(SVY.x as date)
LEFT OUTER JOIN DDD.dbo.DDD FSC
ON SVY.x = FSC.x
AND cast(SVY.x as date) = cast(FSC.x as date)
LEFT OUTER JOIN EEE.dbo.EEE SV1
ON SVY.x = SV1.x
AND SVY.x = SV1.x
AND SVY.x = SV1.x
AND SVY.x = SV1.x
AND cast(SVY.x as date) = cast(SV1.x as date)
AND PPC.x = SV1.x
AND cast(PPC.x as date) = cast(SV1.x as date)
INNER JOIN FFF.dbo.FFF RLS
ON SV1.x = RLS.x
AND SV1.x = RLS.x
AND cast(SV1.x as date) = cast(RLS.x as date)
AND SVY.x = RLS.x
AND SVY.x = RLS.x
AND SVY.x = RLS.x
AND cast(SVY.x as date) = cast(RLS.x as date)
LEFT OUTER JOIN GGG.dbo.GGG PID
ON PP.x = PID.x
AND coalesce(FSC.x, format(cast(SVY.x as int),'000')) = PID.x
LEFT OUTER JOIN HHH.dbo.HHH CAL_B
ON cast('20' + SUBSTRING(RLS.x,4,2) + '-' + SUBSTRING(RLS.x,6,2) + '-' + SUBSTRING(RLS.x,8,2) as date) = CAL_B.x
AND CAL_B.x = 1
LEFT OUTER JOIN III.dbo.III CAL_R
ON cast('20' + SUBSTRING(RLS.x,4,2) + '-' + SUBSTRING(RLS.x,6,2) + '-' + SUBSTRING(RLS.x,8,2) as date) = CAL_R.x
AND CAL_R.x = 1
where
cast(SVY.x as date) = (select cast(max(x) as date) from JJJ.dbo.JJJ)
and
PP.x is not null
and
SVY.x in (?)
問題:我運行包。文本輸入框打開。我把我的文本,'CN05','CN06'「(沒有雙引號),我點擊確定。盒彈出顯示我的輸入。我點擊確定。工作流轉到執行SQL任務。在1秒鐘內完成任務並進行綠色檢查,沒有錯誤。我確認已經創建了TEST.dbo.TEST,但它是空的。 現在,如果我在SSMS中對最後一位[...('CN05','CN06')]中的最後一位[... SVY.x]進行硬編碼運行上述代碼,我會在大約4分鐘內拉回超過500萬條記錄。我很難理解SSIS爲什麼不起作用。那裏有任何想法?
謝謝特洛伊!奇蹟般有效。並感謝關於爲什麼我的方法不起作用的附加信息。每天瞭解有關SQL的新知識。 –
很高興我能幫到你。我認爲你正在構建的工具是內部的,所以沒什麼大不了的,但是由於你正在接受用戶輸入並使用動態SQL,你可能需要做一些[SQL注入保護](https:// www .owasp.org/index.php的/ SQL_Injection_Prevention_Cheat_Sheet)。也許,過濾掉和'''字符或';'字符。 –