"将数据类型varchar转换为float" SQL Server 2008中的消息

时间:2014-06-12 09:07:55

标签: sql-server sql-server-2008

我得到了一个脚本,它将表格的内容(从沙箱中)复制到另一个表格(暂存),但我一直收到“将数据类型varchar转换为浮动”的错误消息。

以下是代码:

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 位于Views文件夹下,并与名为 dbo.cmMasterData 它也驻留在 Test_DB 数据库中。

至于数据类型,

First_DB.Orig_Table

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

Test_DB.DBO.viewCMMasterData

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

我尝试使用 CAST() ,但无济于事。

如果我仍需提供其他详细信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

你们这两个表的CustomerNo的数据类型是不同的,我认为在viewCMMasterData表中有浮点值,它没有转换为varchar格式,即使你施放它也会产生同样的错误。

找出非文本值的值,即数值。转换或转换的原因仅适用于您的数据。

请使用cast作为,也给出宽度。问题还在于宽度。数据可能会被截断。

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

答案 1 :(得分:0)

令人惊讶的是,我得到了一些小调整的脚本。我没有使用 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')

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