我有一个场景,有一个表,我想传递表中的值参数存储过程之一,以形成某些行动。基本的表结构如下。SQL字符串或二进制数据将被截断。同时插入到表类型参数
CREATE TABLE [dbo].[CitytTax] (
[CountryCode] [int] NOT NULL,
[TaxType] [varchar](255) NULL
)
正如您所见,Taxtype列是varchar类型,最多需要255个字符。不过,我将在应用程序代码的一部分中创建如下的表类型,并将此表类型作为参数传递给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个字符?
你有CREATE TYPE [dbo]。[CitytTax] AS TABLE吗?它是什么? –
你确定这些是唯一被插入的值吗? –
我已经离开了我的联盟,但是这可能与ASCII/Unicode等问题有关。切换到unicode(使用'nvarchar')并检查你的数据库模式/排序规则。对不起,如果没有帮助,但另请参阅http://stackoverflow.com/questions/144283/what-is-the-difference-between-varchar-and-nvarchar –