2014-12-02 2 views
0

Я извлекаю данные на SQL Server из базы данных коболов, которая связана как связанный сервер. мы столкнулись с плохими данными в одной из наших таблиц, и я пытаюсь отследить запись оскорбления. в частности, у нас есть письмо, введенное в поле года, когда SQL извлекает данные по нему, пытается преобразовать этот столбец в числовой тип данных.Плохие данные в связанной таблице

Я считаю, что мне нужна комбинация openquery и cast для выбора всех столбцов с по крайней мере определенным столбцом в качестве varchar, чтобы я мог получить конкретную запись о нарушении и иметь отдел. исправить ошибку.

Я пробовал следующие два синтаксиса, но оба они вызывают ошибку.

select * from [incode]...ctvehl 
where VEH_YEAR like '992D' 

select * from openquery (incode, 'select cast(* as nvarchar) from ctvehl') 

для ясности

linked server name = incode 
    table name = CTVEHL 
    Specific offending column = VEH_YEAR 

помощь с этим было бы весьма признателен.

Благодаря

ответ

0

Вы можете просто сначала вставить данные в таблицу работы в SQL Server, который имеет все varchar() столбцы. Затем вы можете проверить и проанализировать рабочую таблицу для возможных ошибок, перемещая плохие строки в таблицу «ошибок» для другой обработки/отчетности. Затем вставьте оставшиеся строки в фактическую таблицу.

Вы должны смотреть в SQL Server Integration Services, предлагает пути к данным массовому импорту и обрабатывать плохие строки, см: SQL Server Integration Services Dealing with Bad Data

+0

с помощью выбора в заявление? –

+0

Я бы использовал что-то вроде 'INSERT INTO local_WorkTable (col1, col2, col3) SELECT col1, col2, col3 FROM openquery (incode, 'select col1, col2, col3 from from ctvehl')'. Тем не менее, вы даже можете попытаться пропустить WorkTable, используя 'INSERT INTO local_RealTable (col1, col2, col3) SELECT col1, col2, cast (col3 как varchar (23)) FROM openquery (incode, 'select col1, col2, col3 from от ctvehl ') '. Openquery передает ваш запрос системе Cobol, которая, похоже, не может обрабатывать 'cast', это заставит' cast' запускать локально на SQL Server. –

+0

нормально с этим кодом 'Создать таблицу local_tempTable ( VEH_VEHICLE_CODE INT, VEH_YEAR VARCHAR (23) ) INSERT INTO local_TempTable (VEH_VEHICLE_CODE, VEH_YEAR) ВЫБРАТЬ VEH_VEHICLE_CODE, литая (VEH_YEAR, как VARCHAR (23)) из OPENQUERY (INCODE" выберите VEH_VEHICLE_CODE, VEH_YEAR из ctvehl ') 'Я все еще вижу эту ошибку провайдера OLE DB« MSDASQL »для связанного сервера« incode »возвращенное сообщение« [TOD] [ODBC] [GENESIS] VISION: поле преобразования ошибки VEH_YEAR string' 992D 'to числовой». Msg 7330, уровень 16, состояние 2, строка 6 Невозможно получить строку от поставщика OLE DB «MSDASQL» для связанного сервера «incode». –

Смежные вопросы