链接表中的数据不正确
问题描述:
我将数据从作为链接服务器连接的cobol数据库中提取到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
援助,这将不胜感激。
感谢
答
你可能只是初步数据插入SQL Server中的一个工作表具有所有varchar()
列。然后,您可以验证并解析工作表以查找可能的错误,并将错误的行移动到其他处理/报告的“错误”表中。然后将其余的行插入到实际的表中。
你应该看看SQL Server集成服务,它提供的方式来大众进口数据和处理问题的行,请参阅:SQL Server Integration Services Dealing with Bad Data
使用select into语句? – 2014-12-02 22:54:35
我会使用类似'INSERT INTO local_WorkTable(col1,col2,col3)的东西SELECT col1,col2,col3 FROM openquery(incode,'select col1,col2,col3 from ctvehl')''。但是,您甚至可以尝试通过使用INSERT INTO local_RealTable(col1,col2,col3)来跳过WorkTable SELECT col1,col2,cast(col3 as varchar(23))FROM openquery(incode,'select col1,col2,col3 from从ctvehl')'。 Openquery会将您的查询传递给Cobol系统,该系统似乎无法处理'cast',这会使'cast'在SQL Server上本地运行。 – 2014-12-03 12:26:42
确定与该代码'创建表local_tempTable ( VEH_VEHICLE_CODE INT, VEH_YEAR VARCHAR(23) ) INSERT INTO local_TempTable(VEH_VEHICLE_CODE,VEH_YEAR)SELECT VEH_VEHICLE_CODE,浇铸(VEH_YEAR为varchar(23))FROM OPENQUERY(incode,'选择VEH_VEHICLE_CODE,VEH_YEAR从ctvehl')我仍然看到这个错误OLE DB提供程序“MSDASQL”链接服务器“incode”返回消息“[TOD] [ODBC] [GENESIS] VISION:错误转换字段VEH_YEAR字符串'992D'到数字”。 Msg 7330,Level 16,State 2,Line 6 无法从链接服务器“incode”的OLE DB提供程序“MSDASQL”中获取一行。 – 2014-12-03 16:44:29