2016-02-09 6 views
2

Когда я использую SSIS для передачи данных из одной таблицы в другую, это дает мне ошибку, и я думаю, что это потому, что в некоторых полях есть *. Есть ли способ удалить это из всех полей? Невозможно определить, в каком поле или столбце оно появится, поскольку это своего рода указание на сноску.'*' Причинение ошибок SSIS

Ошибка:

OLE DB Destination [40]] Error: SSIS Error Code DTS_E_OLEDBERROR. An OLE DB error has occurred. Error code: 0x80004005. An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80004005 Description: "Invalid character value for cast specification".

Спасибо за любую помощь.

Приветствие

+1

Какая ошибка? – Fred

+0

[Назначение OLE DB [40]] Ошибка: Код ошибки SSIS DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80004005. Имеется запись OLE DB. Источник: «Microsoft SQL Server Native Client 11.0» Hresult: 0x80004005 Описание: «Недопустимое значение символа для спецификации литья». –

+0

Поле обычно содержит оценку типа «9», но если у них нет оценки, она отображается как «Недоступно» или «Не доступно». Кроме того, если оценка является лишь частичной оценкой, она будет отображаться как «9 *». Может ли «*» быть удалено каким-то образом в SQL? –

ответ

0

Так что я в конечном итоге с помощью инструкций Case для каждого поля, содержащего «». Чтобы каждый раз, когда он нашел «», он заменил бы поле Null, так как «*» идентифицировал поле как не полностью рассчитанное поле. Таким образом, разрешить мой пакет SSIS выполнить без ошибок.

0

Вы могли бы решить эту проблему удаления не числовые символов из бальной колонки нескольких способов с использованием TSQL и SSIS

, используя код, приведенный ниже, просто замените счет поля в ниже TSQL с колонкой, содержащей счет в Ваш запрос.

SELECT 
    (SELECT CAST(CAST((
     SELECT SUBSTRING(score, Number, 1) 
     FROM master..spt_values 
     WHERE Type='p' AND Number <= LEN(' ') AND 
      SUBSTRING(score, Number, 1) LIKE '[0-9]' FOR XML Path('')) 
    AS xml) AS varchar(MAX))) 

Второе решение с использованием SSIS задачи преобразования сценария вы можете использовать либо VB или C#, чтобы с помощью регулярных выражений функции раздеться не числовых символов, ниже пример использует VB, просто измените Row.ColumName на поле, содержащее оценку в поток данных.

Imports System.Text.RegularExpressions 

Public Overrides Sub Input()_ProcessInputRows(ByVal Row As Input()Buffer) 

    If Row.ColumnName_IsNull = False Or Row.ColumnName = "" Then 

      Dim pattern As String = String.Empty 

      Dim r As Regex = Nothing 

      pattern = "[^0-9]" 

      r = New Regex(pattern, RegexOptions.Compiled) 

      Row.ColumnName = Regex.Replace(Row.ColumnName, pattern, "") 

     End If 

End Sub