我正在运行这条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.请帮帮忙
发布于 2011-05-04 16:21:27
您尝试插入的字符串长度超过了字符的最大长度。例如,在varchar(4000)数据类型中具有4001个字符的字符串。
发布于 2011-05-04 16:52:31
对于您输入的数据,dbo.PricingProfileRuleSetCondition的列定义太短。
因此,尽管您将参数声明为nvarchar(4000),但@p1、@p2、@p3、@p4的其中一个值对于相关列来说太长了。就个人而言,我会将参数数据类型和长度与列相匹配。
随机思考:如果将列声明为不带长度的(n)varchar,则长度缺省为1。
那么,为什么要在这种情况下使用动态SQL呢?这将是一个简单的参数化更新。
发布于 2011-05-04 16:21:03
您的某一列数据类型对于要赋值的字符串来说不够大。您需要增加数据最大长度或截断字符串。
它可能是ColumnName,您正在尝试为它分配一个长度为69的字符串。
https://stackoverflow.com/questions/5880526
复制相似问题