2015-10-02 49 views
0

我试图将两个字段连接成一个,第一个是varchar,第二个是int。我收到了“将数据类型varchar转换为数据类型为int的转换失败”错误,并且我不熟悉sql需要自己解决这个问题的原因。转换失败将varchar转换为Int - 使用Concat

的代码如下:

CONCAT(polpolicynumber, ' - ',转换(VARCHAR(10),poltermsequence))作为REFVALUE

我也不知道为什么它试图将其转换到一个int。保持它作为一个varchar是我想要的。

任何帮助将不胜感激。

非常感谢!

下面是情况下,整个代码,可以帮助:

declare @rundate date = '10-02-2015' 
select @rundate as RunDate, 'FINYS' as Source, 'Agency' as ReferenceTable, 'AgcID' as RefID, agcid as RefValue, 
agcname as LastName, '' as MiddleName, '' as FirstName 
from COHPROD_Policy..agency 
where AgcExpirationDate is NULL or agcexpirationdate > @rundate 
union 
select @rundate as RunDate, 'FINYS' as Source, 'Agent' as ReferenceTable, 'AgtID' as RefID, agtid as RefValue, 
agtname as LastName, '' as MiddleName, '' as FirstName 
from COHPROD_Policy..agent 
where AgtTerminationDate is NULL or AgtTerminationDate > @rundate 
union 
select @rundate as RunDate, 'FINYS' as Source, 'Policy' as ReferenceTable, 'PolNumber' as RefID, 
concat(polpolicynumber, ' ', 'Term', ' ', convert(nvarchar(10),poltermsequence)) as RefValue, 
isnull(connamelast,'') as LastName, isnull(connamemiddle,'') as MiddleName, isnull(connamefirst,'') as FirstName 
from COHPROD_Policy..policy p 
join COHPROD_Policy..ContactXref cox on coxpolid = polid 
join COHPROD_Policy..Contact con on conid = coxconid 
join cohprod_policy..policystatus on pospolid = polid 
where pospolicystatus = 'active' 
+0

你确定'polpolicynumber'是'VARCHAR'吗? – Lamak

+0

是的。奇怪,对吧?当你问这个问题时再次检查。它说: 列PolPolicyNumber(varchar,null) – RJames

+0

是你所有的代码? – Lamak

回答

1

错误似乎并不被从concat,但是当你使用union那里。您在第一个查询(我假设是INT),agtid as RefValue在第二个查询(我也假定是INT)中有agcid as RefValue

然后你在最后一个查询中有concat(polpolicynumber, ' ', 'Term', ' ', convert(nvarchar(10),poltermsequence)) as RefValue,这显然是VARCHAR,并且不能直接用前面的列编辑UNION

+0

啊,好吧。所以我应该首先将agcid和agtid(你正确的是int)转换成varchars?这能解决问题吗? – RJames

+0

@R詹姆斯你为什么不试试看? ;-)(但是,是的,这应该可以解决问题) – Lamak

+0

Ha。 :) 谢谢。完成并完成。问题解决了。非常感谢,拉玛克! – RJames

相关问题