使用select子查询插入时,字符串或二进制数据将被截断

时间:2017-01-26 21:04:06

标签: sql sql-server truncate

通常,该错误意味着其中一个字段太小而无法包含数据的长度。这就是我开始的地方。我在值之前和之后填充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)

1 个答案:

答案 0 :(得分:0)

尝试使用substing或left 将max len设置为8,例如 从表中选择left(field,8) 如果这样可行,那么您知道截断问题。即一些领域是> 8