将数据从一个表提取到另一个表时数据类型不匹配

时间:2013-11-20 13:10:40

标签: sql sql-server-2008-r2

我正在尝试从数据库TD_EDD的表CustomerCase获取数据;到数据库DsVelocity的CustomerCase表。问题是每当我尝试获取数据时,都会生成错误消息,因为在TD_EDD数据库的CustomerCase表中,有3列:LOB,ReferralSource和类型为varchar的CaseType;在DsVelocity数据库的CustomerCase表中,3个匹配的列是LOBID,ReferralSourceID和CaseTypeID,类型为int。

我只是尝试执行此查询:

   INSERT INTO [DsVelocity].[dbo].[CustomerCase]
       ([CustomerID]
       ,[Tier]
       ,[EscalationDate]
       ,[ReferralSourceID]
       ,[ICMSID]
       ,[LOBID]
       ,[TriggerRC]
       ,[TriggerAccount]
       ,[Project]
       ,[CaseTypeID]
       ,[DateDue]
       ,[SARFiledYes]
       ,[SARFiledNo]
       ,[TeamLead]
       ,[SARAmount]
       ,[InitialNotes]
       ,[WorkFlowStatus]
       ,[CaseDecision]
       ,[AccountsReviewed]
       ,[ActionDate]
       ,[SecondLvlReview]
       ,[CompanyType]
       ,[IfOther]
       ,[ClientType]
       ,[MergeFlag]
       ,[MergeCaseID]
       ,[AMLREP]
       ,[HighRiskYes]
       ,[HighRiskNo]
       ,[AutoCreated]
       ,[FileName]
       ,[SourceRefDate]
       ,[SourceRefID]
       ,[ETMAdd]
       ,[ETMRemove]
       ,[ETMDate]
       ,[Investigator]
       ,[InUseBy])
   SELECT [CustomerID]
       ,[Tier]
       ,[EscalationDate]
       ,[ReferralSource]
       ,[ICMSID]
       ,[LOB]
       ,[TriggerRC#]
       ,[TriggerAccount]
       ,[Project]
       ,[CaseType]
       ,[DateDue]
       ,[SARFiledYes]
       ,[SARFiledNo]
       ,[TeamLead]
       ,[SARAmount]
       ,[InitialNotes]
       ,[WorkFlowStatus]
       ,[CaseDecision]
       ,[AccountsReviewed]
       ,[ActionDate]
       ,[2ndLvlReview]
       ,[CompanyType]
       ,[IfOther]
       ,[ClientType]
       ,[MergeFlag]
       ,[MergeCaseID]
       ,[AMLREP]
       ,[HighRiskYes]
       ,[HighRiskNo]
       ,[AutoCreated]
       ,[FileName]
       ,[SourceRefDate]
       ,[SourceRefID]
       ,[ETMAdd]
       ,[ETMRemove]
       ,[ETMDate]
       ,[Investigator]
       ,[InUseBy]
   FROM [TD_EDD].[dbo].[CustomerCase] 

然后遇到以下错误:

Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the varchar value 'CRR' to data type int.

CRR是ReferralSource列中的数据。

在LOB和CaseType列

的情况下,可能会出现类似的消息

我使用的数据库服务器是MSSQL Server 2008 R2。

这个问题的解决方案是什么?

EDIT-1:尝试使用内部连接与LOB,CaseType和ReferralSource表。现在错误已经消失,查询运行正常,但我只从2行获取数据。我无法理解为什么??????我在[TD_EDD]。[dbo]。[CustomerCase]表中有超过40个数据,因此所有这些数据都应该传递给[DsVelocity]。[dbo]。[CustomerCase]表。怎么了?

编辑-2:明白了。 [TD_EDD]中的CaseType列。[dbo]。[CustomerCase]主要是NULL值,只有2行有效数据。因此,只有2行被发送到[DsVelocity]。[dbo]。[CustomerCase]因为没有对空值进行相应的ID匹配。我想我自己弄清楚了。谢谢大家。

2 个答案:

答案 0 :(得分:1)

您可以尝试按照已建议的方式进行投射,或者您可能正在引用错误的字段名称,例如(我将只关注有错误的字段名称):

SELECT 
   ,[ReferralSourceID]
   ,[LOBID]
   ,[CaseTypeID]
FROM [TD_EDD].[dbo].[CustomerCase]

而不是ReferralSource使用ReferralSourceID而不是LOB使用LOBID而不是CaseType使用CaseTypeID

或者您可能需要在以下字段中引用参考表:

SELECT 
   ,[ReferralSourceID]
   ,[LOBID]
   ,[CaseTypeID]
FROM [TD_EDD].[dbo].[CustomerCase] CC
INNER JOIN Referral R
ON CC.ReferralSource = R.ReferralSource
INNER JOIN LobTbl L
ON CC.LOB = L.LOB
INNER JOIN CaseTypeTbl C
ON CC.CaseType = C.CaseType

答案 1 :(得分:0)

尝试将casting varchar列设置为int(假设源列中的数据对目标中的int列有效)

SELECT CAST(ReferralSource AS int), 
CAST(LOB AS int),
CAST(CaseType AS int)
--etc