我正在运行此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.
说明,请
答案 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的长度,请查看“左”或“右”函数。