我运行data.bat文件与以下行:

Rem Tis batch file will populate tables

cd\program files\Microsoft SQL Server\MSSQL
osql -U sa -P Password -d MyBusiness -i c:\data.sql

数据的内容。SQL文件是:

   insert Customers
            (CustomerID, CompanyName, Phone)
             Values('101','Southwinds','19126602729')

还有8个类似的行用于添加记录。

当我运行这个开始>运行> cmd > c:\data.bat,我得到这个错误信息:

1>2>3>4>5>....<1 row affected>
Msg 8152, Level 16, State 4, Server SP1001, Line 1
string or binary data would be truncated.

<1 row affected>

<1 row affected>

<1 row affected>

<1 row affected>

<1 row affected>

<1 row affected>

此外,我显然是一个新手,但级别#和状态#意味着什么,我如何查找错误消息,如上面的一个:8152?


当前回答

此错误仅当任何字段长度大于sql server数据库表结构中指定的字段长度时出现。

为了克服这个问题,你必须减少字段值的长度。 或者增加数据库表字段的长度。

其他回答

只是想提供额外的信息:我也有同样的问题,这是因为字段对传入的数据不够大,这个线程帮助我解决了这个问题(上面的答案澄清了一切)。

但是,了解可能导致它的可能原因是非常重要的。

在我的情况下,我创建了一个字段像这样的表:

Select '' as  Period, * From Transactions Into #NewTable

因此,字段“Period”的长度为零,导致插入操作失败。我将其更改为“XXXXXX”,这是输入数据的长度,现在它可以正常工作(因为字段现在的长度为6)。

我希望这对有同样问题的人有帮助:)

我也有同样的问题。我的专栏太短了。

您所能做的就是增加或缩短想要放入数据库中的文本的长度。

在这方面,你根本无法打败SQL Server。

你可以像这样插入一个新表:

select foo, bar
into tmp_new_table_to_dispose_later
from my_table

并将表定义与要插入数据的实际表进行比较。

有时有用,有时没用。

如果您尝试从临时表插入final/real表,它可能只是工作(例如,由于数据转换的工作方式与SSMS不同)。

另一种替代方法是以块的形式插入数据,而不是立即插入所有内容,插入前1000个,然后重复这个过程,直到找到一个有错误的块。至少您可以更好地了解表中不适合的内容。

此错误仅当任何字段长度大于sql server数据库表结构中指定的字段长度时出现。

为了克服这个问题,你必须减少字段值的长度。 或者增加数据库表字段的长度。

凯文·波普在公认答案下的评论正是我所需要的。

在我的例子中,问题是我在我的表上定义了触发器,将更新/插入事务插入到审计表中,但审计表有一个数据类型不匹配,其中原始表中具有VARCHAR(MAX)的列存储为审计表中的VARCHAR(1),因此当我在原始表列中插入大于VARCHAR(1)的任何内容时,我的触发器失败,并且我会得到这个错误消息。