SQL Server 2008中的“将数据类型varchar转换为float时出错”消息

rpppsulh  于 2022-12-17  发布在  SQL Server
关注(0)|答案(2)|浏览(821)

我得到了一个脚本,它将把一个表的内容(从沙箱)复制到另一个表(暂存),但我一直收到“将数据类型varchar转换为float时出错”的消息。
下面是代码:

INSERT INTO First_DB.Orig_Table
(CustomerNo, AccountGroupID, ComCode)

SELECT A.CustomerNo, A.AccountGroupID, A.ComCode
FROM Test_DB.DBO.viewCMMasterData A
WHERE NOT EXISTS(SELECT B.CustomerNo
                 FROM First_DB.Orig_Table B
                 WHERE B.CustomerNo = A.CustomerNo)

***Test_DB.DBO.viewCMMasterData***位于“视图”文件夹下,并与名为***dbo.cmMasterData***的表绑定,该表也位于***Test_DB***数据库中。

至于数据类型,

第一个数据库原始表

CustomerNo (PK, varchar(10), not null)
AccountGroupID (int, null)
ComCode (varchar(4), null)

测试数据库.数据库对象.查看CM主数据

CustomerNo (nvarchar(255), null)
AccountGroupID (smallint, not null)
ComCode (varchar(4), not null)

我尝试使用***CAST()***,但没有效果。
如果我还需要提供更多详细信息,请告诉我。

zynd9foi

zynd9foi1#

两个表的CustomerNo的数据类型不同,我认为viewCMMasterData表中有浮点值,未转换为varchar格式,即使您强制转换,也会出现相同的错误。
找出非文本值,即数值。转换或转换的原因只适用于当您的数据是适当的。
请使用强制类型转换为,并给予宽度。2问题也是由于宽度。3数据可能被截断。

INSERT INTO First_DB.Orig_Table
(CustomerNo, AccountGroupID, ComCode)

SELECT cast ( A.CustomerNo as varchar(10) ) , A.AccountGroupID, A.ComCode
FROM Test_DB.DBO.viewCMMasterData A
WHERE NOT EXISTS(SELECT B.CustomerNo
                 FROM First_DB.Orig_Table B
                 WHERE B.CustomerNo = A.CustomerNo)

我作为本地人测试,这对我很有效。

declare @t table (customerno nvarchar(255), AccountGroupID smallint, ComCode varchar(4))
declare @t1 table (customerno varchar(10), AccountGroupID int, ComCode varchar(4))

insert into @t values ('abc',1,'a'),('120.33',2,'a'),('xna',1,'a')
insert into @t1 values ('abc',1,'a')

select * from @t
select * from @t1

insert into @t1 
select * from @t a
WHERE NOT EXISTS (SELECT B.CustomerNo
                 FROM @t1 B
                 WHERE B.CustomerNo = A.CustomerNo)

select * from @t
select * from @t1

insert into @t values ('123456.6',1,'a')--,('12345678910.35466',1,'a') --if remove this comment, then gives below error.

insert into @t1 
select * from @t a
WHERE NOT EXISTS (SELECT B.CustomerNo
                 FROM @t1 B
                 WHERE B.CustomerNo = A.CustomerNo)
-- the above statement give me error as, other wise everything transfer
"String or binary data would be truncated."

select * from @t
select * from @t1
k4ymrczo

k4ymrczo2#

令人惊讶的是,我对脚本做了一些小的调整。我没有使用 A.CustomerNo,而是使用实际值进行比较。下面是我的代码:

INSERT INTO CCBP_PhaseII.customer.CM_MRWrkFieldsForMtnc
(CustomerNo, AccountGroupID, ComCode)
SELECT CAST(A.CustomerNo as INT), A.AccountGroupID, A.ComCode
FROM TEST_C1MDM_DB.DBO.viewCMMasterData A
WHERE NOT EXISTS(SELECT B.CustomerNo
                 FROM CCBP_PhaseII.customer.CM_MRWrkFieldsForMtnc B
                 WHERE B.CustomerNo = '503744242')

我知道这不是解决此问题的有效方法,尤其是在将多个记录从一个表传输到另一个表时。我希望您能给予我更多建议以改进此解决方案。感谢所有回复的人!

相关问题