SQL字符串或二进制数据将被截断。插入表类型参数

时间:2017-05-05 12:03:17

标签: sql sql-server-2008 database-design

我有一个场景,其中有一个表,并且我在一个存储过程中传递表值param以执行某些操作。基本表结构如下。

CREATE TABLE [dbo].[CitytTax] (
    [CountryCode] [int] NOT NULL,
    [TaxType] [varchar](255) NULL
) 

如您所见,Taxtype列是varchar类型,最多需要255个字符。但是,我将在表格类型上创建如下部分应用程序代码,并将此表类型作为param传递给sp之一。

DECLARE @TaxDetails as [CitytTax]

现在我将向其中插入一些虚拟值,并将此表类型传递给SP中的一个。

INSERT INTO @TaxDetails ([CountryCode],TaxType )
VALUES (6047,'Codfggtuioanoio charge to fund the liquidation of insurancevalues')

但收到如下错误:

  

字符串或二进制数据将被截断

这里的问题是表值类型有一个类似于实际数据库表的列。因此当我插入上面的脚本时,它失败了。但是,如果我向[taxtype]插入任何小于50个字符的值,它将成功插入。但失败超过50个字符。 IM想知道为什么它失败了,它应该占用多达255个字符?

2 个答案:

答案 0 :(得分:0)

如果您的数据长度确实短于字段长度。然后你在主表上有一个由触发器填充的另一个表,那里的列大小也必须改变。

此外,将插入的所有单引号替换为查询以双引号并将其传递给存储过程。

答案 1 :(得分:0)

我发现了一些快速修复的东西:在插入查询之前添加到下面的行:

设置ANSI_WARNINGS OFF。