Sql-Server-2008

將字元串允許 null col 轉換為 int?

  • September 23, 2014

我想將字元串轉換為 int 我的字元串類型

$$ DT_WSTR $$和我的表情

ISNULL(col) || TRIM(col) == "" ? (DT_I4)0 : (DT_I4)col

我收到這個錯誤

$$ Derived Column [518 $$] 錯誤:條件操作失敗。

您的源數據中有一些不會轉換為整數值的東西。

由於表達式語言沒有 tryparse 方法,最簡潔的機制是使用腳本組件作為轉換並利用 .NET 方法。

  1. 將腳本組件連接到您的源。
  2. 在 Input Columns 選項卡上,選中colReadOnly。
  3. 在 Inputs and Outputs 選項卡上,展開 Output 0,點擊 Output Columns 並選擇Add Column
  4. 將此列重命名為 CleanCol 並保留預設數據類型 DT_I4
  5. 點擊返回到腳本選項卡,然後點擊Edit Script...
  6. 在您的程式碼中使用以下方法

在此處行,以便格式化

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 .

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/77120