2017-05-05 53 views
1

我有一个场景,有一个表,我想传递表中的值参数存储过程之一,以形成某些行动。基本的表结构如下。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个字符?

+0

你有CREATE TYPE [dbo]。[CitytTax] AS TABLE吗?它是什么? –

+0

你确定这些是唯一被插入的值吗? –

+0

我已经离开了我的联盟,但是这可能与ASCII/Unicode等问题有关。切换到unicode(使用'nvarchar')并检查你的数据库模式/排序规则。对不起,如果没有帮助,但另请参阅http://stackoverflow.com/questions/144283/what-is-the-difference-between-varchar-and-nvarchar –

回答

0

如果您的数据长度确实比字段长度短。然后你需要在主表上填充另一个表格,其中列大小也必须改变。

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

+0

它与ANSI_WARNIGS OFF一起工作。我给了一块SP,但没有完成......你也可以在这里参考其他情况:https://raresql.com/2014/01/03/sql-server-a-quick-solution-to -string-or-binary-data-will-be-truncated-using-stored-procedure/ – maheshkumarbm

0

好吧,我想通了,应该说这是速战速决:刚才添加以下行插入查询之前:

SET ANSI_WARNINGS OFF。

+1

这不是一个修复。那就是将你的手指伸入你的耳朵,并喊着“LA LA LA我听不到你”。截断仍然会发生**,你现在只是“高兴地”忽略这个事实。 –

+0

它已经工作。我给了一块SP,但没有完成......你可以在这里参考其他的例子:https:// raresql。com/2014/01/03/sql-server-a-quick-solution-to-string-or-binary-data-will-be-truncated-using-stored-procedure/ – maheshkumarbm

+0

IM再次告诉,它只是一个快速修复我发现......即使我明白,接受这是最终的修正。 – maheshkumarbm

相关问题