【问题标题】:EXEC throw string or binary data would be truncatedEXEC 抛出字符串或二进制数据将被截断
【发布时间】:2017-02-24 01:04:48
【问题描述】:

在某些情况下出现以下查询抛出错误

Declare @Col Varchar(100)
Select @ClientDocFormat=NoticeFormat From ClientDocumentFormat Where ClientID=@ClientID And FormatTypeID=@FormatType
Set @mCursor=Cursor For Select Fields,DATA_TYPE From V_EmployeeMasterFields
Open @mCursor
Fetch Next From @mCursor Into @ColumnName,@DATA_TYPE
WHILE @@FETCH_STATUS = 0
Begin
     Set @Col=REPLACE(@ColumnName,'@@','')
     If @DATA_TYPE='date'
        Set @Col='CONVERT(Varchar,'+@Col+',106)'
     Set @ClientDocFormat=REPLACE(@ClientDocFormat,@ColumnName,('!!+IsNull('+@Col+','''')+!!'))

Fetch Next From @mCursor Into @ColumnName,@DATA_TYPE
End
CLOSE @mCursor
DEALLOCATE @mCursor
Set @ClientDocFormat='Select '''+REPLACE( Replace(@ClientDocFormat,'''',''''''),'!!','''')+''' As DocFormat From V_EmployeeDetails Where EmpID='''+CONVERT(Varchar(20), @EmpID)+''''
EXEC(@ClientDocFormat)

以下是错误:

文档格式
消息 8152,第 16 级,状态 10,第 1 行
字符串或二进制数据将被截断。

【问题讨论】:

  • EXEC 之前打印@ClientDocFormat。这将帮助您确定问题
  • 您错过了提供所有变量声明。 "CONVERT(Varchar,'+@Col+',106)" 仅使用默认字符数。在数据定义或变量声明语句中未指定 n 时,默认长度为 1。使用 CAST 和 CONVERT 函数时未指定 n 时,默认长度为 30。msdn.microsoft.com/en-us/library/ms176089.aspx

标签: sql-server-2008


【解决方案1】:

这里,该字段不够大,无法保存我的数据。

检查表的表结构。我想您会发现一个或多个字段的长度不足以容纳您尝试插入/选择/持有变量的数据。例如,如果 Phone 字段是 varchar(8) 字段,并且您尝试将 11 个字符放入其中,您将收到此错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多