我得到了一个脚本,它将表格的内容(从沙箱中)复制到另一个表格(暂存),但我一直收到“将数据类型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() ,但无济于事。
如果我仍需提供其他详细信息,请与我们联系。
答案 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')
我知道这不是解决此问题的有效方法,尤其是当您将多个记录从一个表转移到另一个表时。我希望你能给我更多建议来改进这个解决方案。感谢所有回复的人!