从SQL Server存储过程中的表中选择文本列

时间:2019-07-11 16:28:08

标签: sql-server tsql stored-procedures

我很难弄清楚这一点。我有一个事件表,其中包含列idcommentsincidentdateincidentdescID。该表中有10年的数据。我编写了一个存储过程来提取最近4年的数据,但遇到以下错误。

  

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

因此,当我将事件的日期范围更改为2015年至2016年之间时,我没有收到任何错误消息。然后,当我将其更改为2017-2018年之间时,我仍然没有收到错误。但是当我将其更改为2016年至2017年之间时,我得到了错误。同样,当我注释掉comments列时,无论输入什么日期范围,都不会出现错误。

因此,我想Comments列中可能有一个特殊字符,该列是text表中的Incident列。如果是这种情况,我如何能够选择该列,但在不更改表的情况下删除存储过程中的特殊字符?

1 个答案:

答案 0 :(得分:0)

如果您怀疑“评论”列是罪魁祸首,则可以在我的朋友中搜索垃圾值。我一次收到此错误,并通过用空格替换char(10)和char(13)来解决。

1。

    SELECT REPLACE(REPLACE(tbl.comments, CHAR(10), '*JUNK*'), CHAR(13), '*JUNK*') AS CleandComments 
    FROM [your table name] tbl
  1. 将查询结果复制到任何编辑器中,并搜索与 JUNK 关键字相对应的记录。

当您从Excel数据源或具有NVARCHAR数据类型的源表中导入数据而目标是CSV或仅接受VARCHAR时,这是理想的情况。

如果是上述情况,那么您只需要在过程中的列上放置REPLACE函数