sql异常:语句已终止

时间:2011-05-04 08:19:15

标签: sql sql-server

我正在运行此SQL语句

exec sp_executesql
  N'UPDATE dbo.PricingProfileRuleSetCondition
SET    RuleGroup = @p0,
       JoinClause = @p1,
       ColumnName = @p2,
       Operator = @p3,
       Value = @p4,
       RuleSetId = @p5
WHERE  Id = @p6',
N'      @p0 int,
        @p1 nvarchar(4000),
        @p2 nvarchar(4000),
        @p3 nvarchar(4000),
        @p4 nvarchar(4000),
        @p5 bigint,
        @p6 bigint'
,
@p0=0,
@p1=N'And',
@p2=N'DMS.Finance.Entities.PartnerAccountTransactionAmountType.EnglishName',
@p3=N'eq',
@p4=N'dsaf',
@p5=4,
@p6=6  

我正在

Msg 8152, Level 16, State 2, Line 1
String or binary data would be truncated.
The statement has been terminated.

说明,请

4 个答案:

答案 0 :(得分:7)

您要插入的字符串比字符串的最大数量长。例如。就像varchar(4000)数据类型中包含4001个字符串的字符串一样。

答案 1 :(得分:3)

dbo.PricingProfileRuleSetCondition的列定义对于您输入的数据来说太短了。

因此,尽管您将参数声明为nvarchar(4000),但@ p1,@ p2,@ p3,@ p4的值之一对于相关列来说太长了。就个人而言,我将参数数据类型和长度与列匹配。

随机思考:如果您将列声明为(n)varchar且没有长度,则长度默认为1.

在这种情况下,为什么要使用动态SQL呢?这将是一个简单的参数化更新。

答案 2 :(得分:2)

您的某个列数据类型对于您指定的字符串来说不够大。您需要增加数据最大长度或截断字符串。

它可能是ColumnName,您尝试分配长度为69的字符串。

答案 3 :(得分:1)

以防万一,如果你需要安全地将数据截断到4000的长度,请查看“左”或“右”函数。