Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 有没有办法强制将截断的列插入SQL Server表中?_Sql Server 2005_Bcp - Fatal编程技术网

Sql server 2005 有没有办法强制将截断的列插入SQL Server表中?

Sql server 2005 有没有办法强制将截断的列插入SQL Server表中?,sql-server-2005,bcp,Sql Server 2005,Bcp,数据以电子表格的形式提供给我,我正在将其转换为以管道分隔的文件。我尝试插入46000多行,但其中四(4)行失败,并显示错误消息 SQLState=22001,NativeError=0 错误=[Microsoft][SQL本机客户端]字符串数据,右截断 知道哪些行失败会很好。是否有一种方法可以强制使用截断字符串插入这些行,或者确定哪些行使用BCP失败 我已经尝试过构建 在XLSX文件中插入语句 与连接。这失败了,因为 我有太多的参数用于 凹形 我试过逗号和逗号 制表符分隔的文件,失败 因为有些数

数据以电子表格的形式提供给我,我正在将其转换为以管道分隔的文件。我尝试插入46000多行,但其中四(4)行失败,并显示错误消息

SQLState=22001,NativeError=0 错误=[Microsoft][SQL本机客户端]字符串数据,右截断

知道哪些行失败会很好。是否有一种方法可以强制使用截断字符串插入这些行,或者确定哪些行使用BCP失败

  • 我已经尝试过构建 在XLSX文件中插入语句 与连接。这失败了,因为 我有太多的参数用于 凹形
  • 我试过逗号和逗号 制表符分隔的文件,失败 因为有些数据是这样的 人物
  • 我最终构建了管道分隔 更改后的文件 本地化设置,这样我就可以做了 使用Excel()完成此操作,然后将它们导入MyCreatedCSVFile.csv-T-c-T中带有
    bcp TableName的表中^|
    
    您可以设置足够高的错误数以覆盖异常,然后指定错误文件。然后一次处理一个异常。这是最干净的方法。如果您愿意使用SSI,您可以在工作流程中更加详细地处理截断和日志记录,但您将失去批量复制的好处。

    您使用的是暂存表吗

    您通常会使用一个具有大量列长度等的列,然后执行验证和质量检查。即使是一个简单的

    INSERT Finaltable (..)
    SELECT (..), LEFT (offendingcolumn, 100) FROM Stagingtable
    

    一个存储的进程也可以用来进行批量插入,然后进行一些检查,然后插入到最终的表中。

    我通过创建一个“而不是”触发器成功地做到了这一点

    我用varchar(max)创建了一个表,以确保我没有得到截断。 然后,我在insert上创建了一个instead of触发器(因此这个“代理”表永远不会得到行)

    在触发器中,我进行转换(varchar(50),name255)。 Ie:显式执行截断

    但是,这意味着您需要使用BCP命令指定“FIRE_TRIGGER”

    这有什么帮助