通常,该错误意味着其中一个字段太小而无法包含数据的长度。这就是我开始的地方。我在值之前和之后填充X以检查空格,并且我使用LEN来检查数据的长度,我找不到任何错误。
CREATE TABLE TEMP1 (BUSINESS_UNIT VARCHAR(5) NOT NULL,
NATIONAL_ID VARCHAR(20) NOT NULL,
ACCOUNT_BALANCE DECIMAL(12, 2) NOT NULL,
STRM VARCHAR(4) NOT NULL,
FIRST_NAME_SRCH VARCHAR(30) NOT NULL,
LAST_NAME_SRCH VARCHAR(30) NOT NULL,
COMMON_ID VARCHAR(8) NOT NULL)
INSERT INTO TEMP1 (BUSINESS_UNIT, NATIONAL_ID, ACCOUNT_BALANCE, STRM,
FIRST_NAME_SRCH, LAST_NAME_SRCH, COMMON_ID)
(SELECT ASF.BUSINESS_UNIT, NATL.NATIONAL_ID, ASF.ACCOUNT_BALANCE, '1162'
,NM.FIRST_NAME_SRCH,NM.LAST_NAME_SRCH,ASF.EMPLID
FROM PS_ACCOUNT_SF ASF (NOLOCK)
, PS_NAMES NM (NOLOCK)
, PS_PERS_NID NATL (NOLOCK)
WHERE ASF.BUSINESS_UNIT = 'ABCDEFG'
AND ASF.ACCOUNT_TERM = '1162'
AND ASF.ACCOUNT_BALANCE > 0
.......... more code, etc.
Select返回15行。 样本行:
ABCD1 123456789 46.30 1162 JOHN SMITH 12345678
现在,我能够发现它是EMPLID字段,因为当我在select中选择ASF.EMPLID字段并输入类似'12345678'的硬编码时,它就成功了。但是我检查了返回值的长度,它们都是8。
值得注意的是,所选字段ASF.EMPLID是VARCHAR(11),目标字段是VARCHAR(8)。 我的解决方案是将COMMON_ID VARCHAR(8)更改为VARCHAR(11),它运行正常。 但我的问题仍然存在......如果值的长度是8,那有关系吗?或者是其他事情发生了吗?
Microsoft SQL Server 2014(SP1-GDR)
答案 0 :(得分:0)
尝试使用substing或left 将max len设置为8,例如 从表中选择left(field,8) 如果这样可行,那么您知道截断问题。即一些领域是> 8