Sql-Server-2008
將字元串允許 null col 轉換為 int?
我想將字元串轉換為 int 我的字元串類型
$$ DT_WSTR $$和我的表情
ISNULL(col) || TRIM(col) == "" ? (DT_I4)0 : (DT_I4)col
我收到這個錯誤
$$ Derived Column [518 $$] 錯誤:條件操作失敗。
您的源數據中有一些不會轉換為整數值的東西。
由於表達式語言沒有 tryparse 方法,最簡潔的機制是使用腳本組件作為轉換並利用 .NET 方法。
- 將腳本組件連接到您的源。
- 在 Input Columns 選項卡上,選中
col
ReadOnly。- 在 Inputs and Outputs 選項卡上,展開 Output 0,點擊 Output Columns 並選擇
Add Column
- 將此列重命名為 CleanCol 並保留預設數據類型 DT_I4
- 點擊返回到腳本選項卡,然後點擊
Edit Script...
- 在您的程式碼中使用以下方法
在此處行,以便格式化
public override void Input0_ProcessInputRow(Input0Buffer Row) { int colOut = 0; if (!Int32.TryParse(Row.col, out colOut)) { Row.CleanCol_IsNull = true; } else { Row.CleanCol = colOut; } }
這是我的源查詢
SELECT D.* FROM ( VALUES (N'1') , ('') , ('0') , ('3') , ('X') -- Uncomment this one to generate error , (NULL) ) D(col);
結果
我想了很久,在上面的腳本中,如果您想為“壞”值輸出零,請將 if 語句中的第一個操作替換為
Row.CleanCol = 0;
否則,這將生成數字和非數字的 NULL .