我正在尝试从数据库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匹配。我想我自己弄清楚了。谢谢大家。
答案 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