Как я могу использовать LRTIM и RTRIM, чтобы найти недействительные записи и вставить его в таблицу ошибок? - PullRequest
1 голос
/ 25 января 2011

У меня есть запрос, который находит недопустимые записи из каждого столбца в таблице. но длина типа данных не одинакова для всех столбцов. Я говорю это потому, что когда я использую LTRIM и RTRIM, он выдает ошибку " Тип столбца" SubscriberLastName "конфликтует с типом других столбцов, указанных в списке UNPIVOT ", и если я CAST этот столбец, то нет результата.

Кто-нибудь может мне помочь с этим?

Insert into ErrorTable (------) select (-----)
From (
            select [SubscriberDataId]
            ,Case When ltrim(rtrim([SubscriberCode])) = '' Then [SubscriberCode] Else 'CorrectValue' end as [SubscriberCode]
            ,Case When ltrim(rtrim([SubscriberLastName]))= '' Then [SubscriberLastName] Else 'CorrectValue' end as [SubscriberLastName]
            ,Case When ltrim(rtrim([SubscriberFirstName]))= ''  Then [SubscriberFirstName] Else 'CorrectValue' end as [SubscriberFirstName]
            from Facets.SubscriberData) [sd]
            Unpivot
            (ErrorValue for FieldName in ([SubscriberCode],
            [SubscriberLastName],[SubscriberFirstName] )) as x
            where x.ErrorValue <> 'CorrectValue'

1 Ответ

0 голосов
/ 25 января 2011

Вы должны убедиться, что ТИПЫ одинаковы, а не только длины.

Insert into ErrorTable (------) select (-----)
From (
            select [SubscriberDataId]
            ,Case When ltrim(rtrim([SubscriberCode])) = '' Then CAST([SubscriberCode] AS NVARCHAR(MAX)) Else 'CorrectValue' end as [SubscriberCode]
            ,Case When ltrim(rtrim([SubscriberLastName]))= '' Then CAST([SubscriberLastName] AS NVARCHAR(MAX)) Else 'CorrectValue' end as [SubscriberLastName]
            ,Case When ltrim(rtrim([SubscriberFirstName]))= ''  Then CAST([SubscriberFirstName] AS NVARCHAR(MAX)) Else 'CorrectValue' end as [SubscriberFirstName]
            from Facets.SubscriberData) [sd]
            Unpivot
            (ErrorValue for FieldName in ([SubscriberCode],
            [SubscriberLastName],[SubscriberFirstName] )) as x
            where x.ErrorValue <> 'CorrectValue'
...