【发布时间】: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