首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql异常:语句已终止

问sql异常:语句已终止
EN

Stack Overflow用户
提问于 2011-05-04 16:19:15
回答 5查看 51.1K关注 0票数 7

我正在运行这条SQL语句

代码语言:javascript
复制
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  

然后我就得到了

代码语言:javascript
复制
Msg 8152, Level 16, State 2, Line 1
String or binary data would be truncated.
The statement has been terminated.

请帮帮忙

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-04 16:21:27

您尝试插入的字符串长度超过了字符的最大长度。例如,在varchar(4000)数据类型中具有4001个字符的字符串。

票数 9
EN

Stack Overflow用户

发布于 2011-05-04 16:52:31

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

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

随机思考:如果将列声明为不带长度的(n)varchar,则长度缺省为1。

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

票数 3
EN

Stack Overflow用户

发布于 2011-05-04 16:21:03

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5880526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档