我有一个场景,其中有一个表,并且我在一个存储过程中传递表值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个字符?
答案 0 :(得分:0)
如果您的数据长度确实短于字段长度。然后你在主表上有一个由触发器填充的另一个表,那里的列大小也必须改变。
此外,将插入的所有单引号替换为查询以双引号并将其传递给存储过程。
答案 1 :(得分:0)
我发现了一些快速修复的东西:在插入查询之前添加到下面的行:
设置ANSI_WARNINGS OFF。