sql - 字符串或二进制数据将被截断。该语句已终止。 (长度相同)

标签 sql sql-server

我收到上述错误消息,并且我知道当您尝试将较大的数据插入较小的列时“通常”是这样。

问题是,传入的列并不比目标列大。

看看:

CREATE TABLE #temp (
    row_id INT identity(1, 1)
    ,error_ind BIT DEFAULT 0
    ,add_edit_del_ind VARCHAR(1) DEFAULT ''
    ,vendor_sap_load_temp_id INT
    ,vendor_id VARCHAR(10)
    ,vendor_name VARCHAR(35)
    ,title VARCHAR(15)
    ,name2 VARCHAR(35)
    ,name3 VARCHAR(35)
    ,name4 VARCHAR(35)
    ,address VARCHAR(60)
    ,city VARCHAR(40)
    ,district VARCHAR(40)
    ,STATE VARCHAR(3)
    ,zipcode VARCHAR(10)
    ,country VARCHAR(3)
    ,account_grp VARCHAR(4)
    ,industry_key VARCHAR(4)
    ,ext_code VARCHAR(10)
    ,systems_ind VARCHAR(10)
    ,remit_to_vendor_id VARCHAR(10)
    ,LANGUAGE VARCHAR(10)
    ,individual_us_tax_id VARCHAR(9)
    ,vendor_us_tax_id VARCHAR(9)
    ,vat_reg_cd VARCHAR(20)
    ,tax_office VARCHAR(10)
    ,tax_nbr VARCHAR(18)
    ,tax_jurisdiction VARCHAR(15)
    ,phone_nbr VARCHAR(30)
    ,email_addr VARCHAR(241)
    ,delete_ind BIT
    ,stk_id INT
    ,stk_role_id INT
    ,name_id INT
    )

然后数据被插入到这个表中,这里是所有列的 MAX(LEN()):

SELECT max(len(vendor_id)) vendor_id
    ,max(len(vendor_name)) vendor_name
    ,max(len(title)) title
    ,max(len(name2)) name2
    ,max(len(name3)) name3
    ,max(len(name4)) name4
    ,max(len(address)) address
    ,max(len(city)) city
    ,max(len(district)) district
    ,max(len(STATE)) STATE
    ,max(len(zipcode)) zipcode
    ,max(len(country)) country
    ,max(len(account_grp)) account_grp
    ,max(len(industry_key)) industry_key
    ,max(len(ext_code)) ext_code
    ,max(len(systems_ind)) systems_ind
    ,max(len(remit_to_vendor_id)) remit_to_vendor_id
    ,max(len(LANGUAGE)) LANGUAGE
    ,max(len(individual_us_tax_id)) individual_us_tax_id
    ,max(len(vendor_us_tax_id)) vendor_us_tax_id
    ,max(len(vat_reg_cd)) vat_reg_cd
    ,max(len(tax_office)) tax_office
    ,max(len(tax_nbr)) tax_nbr
    ,max(len(tax_jurisdiction)) tax_jurisdiction
    ,max(len(phone_nbr)) phone_nbr
    ,max(len(email_addr)) email_addr
    ,max(len(delete_ind)) delete_ind
FROM #temp

结果:

这里我尝试插入到目的地:

INSERT INTO final_destination_table (
    vendor_id
    ,vendor_name
    ,honorific
    ,name2
    ,name3
    ,name4
    ,address
    ,city
    ,district
    ,STATE
    ,zipcode
    ,country
    ,account_grp
    ,industry_key
    ,ext_code
    ,systems_ind
    ,remit_to_vendor_id
    ,LANGUAGE
    ,vendor_ssn
    ,vendor_tin
    ,vat_reg_cd
    ,tax_office
    ,tax_nbr
    ,tax_jurisdiction
    ,phone_nbr
    ,email_addr
    ,delete_ind
    )
SELECT vendor_id
    ,vendor_name
    ,title
    ,name2
    ,name3
    ,name4
    ,address
    ,city
    ,district
    ,STATE
    ,zipcode
    ,country
    ,account_grp
    ,industry_key
    ,ext_code
    ,systems_ind
    ,remit_to_vendor_id
    ,LANGUAGE
    ,individual_us_tax_id
    ,vendor_us_tax_id
    ,vat_reg_cd
    ,tax_office
    ,tax_nbr
    ,tax_jurisdiction
    ,phone_nbr
    ,email_addr
    ,delete_ind
FROM #temp

我得到错误:

这是目标表的样子:

我没有发现列的长度有任何问题...任何人都可以发现错误吗?

最佳答案

大胆的猜测,但我敢打赌,您对 created_by 列有一个默认约束,它获取类似于 CURRENT_USER 的内容,它的长度比 created_by 列的 varchar(10) 定义长。检查所有默认约束。

关于sql - 字符串或二进制数据将被截断。该语句已终止。 (长度相同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35138255/

相关文章:

java - 使用 Java 和 SQL 删除两个表中的行

sql-server - 将数据插入 SQL Server 返回错误代码 00q

javascript - 使用 WebSQL。如何向现有表添加新列?

mysql - SQL:在一个表中返回多对多

sql - 查看 SQL Server 执行日志,非常详细以用于调试

sql-server - 使用 SQL Server 中的一张表上的聚合函数更新查询

r - 使用 R 和 SQL 服务器驱动程序设置 docker 镜像

SQL Server - 删除多列具有空值或零值的行

mysql - 根据另一张表从一张表中提取信息的查询

java - 在 PreparedStatement 中使用 setDate