T-SQL:字段的子字符串

时间:2017-07-14 02:59:53

标签: sql sql-server substring

我在这样的查询中选择了一些字段:

SELECT DISTINCT 
    SummaryID = CAST(MT.Row_ID AS VARCHAR),
    MyCode = MT.My_UUID,
    MyDate = MT.MyDateTime, 
    Hyperlink = MT.Url,
    ArticleTypeID = @DefaultArticleTypeID
FROM 
    @Updates U
JOIN 
    dbo.MyItems MT ON U.RowID = MT.Row_ID

我将这些值插入另一个表中,发现其中一个字段产生了这个错误:

  

字符串或二进制数据将被截断。

这是因为MT.Url的网址长于我的目的地所能容纳的网址。

所以我的解决方案如下,它只是一个解决方案,因为我们要将目标表的列更改为永久解决方案,但这是一项正在进行的更大工作,在此之前,我有:

Hyperlink = SubString(MT.Url, 1, 1000),

并非所有网址都会超过此限制,仅约为1%。

我的问题是,从性能角度来看,这是否是最佳解决方案?我最好在子串之前检查第一个长度吗?

1 个答案:

答案 0 :(得分:2)

不要担心此类性能微观改进 - 您已经在进行joinselect distinct

我会写这样的查询:

SELECT DISTINCT SummaryID = CAST(MT.Row_ID AS VARCHAR(255)),
       MyCode = MT.My_UUID,
       MyDate = MT.MyDateTime, 
       Hyperlink = LEFT(MT.Url, 1000),
       ArticleTypeID = @DefaultArticleTypeID
FROM @Updates U JOIN 
     dbo.MyItems MT
     ON U.RowID = MT.Row_ID;

注意:

  • 如果不需要,请删除SELECT DISTINCT
  • LEFT()SUBSTR()简单。
  • 指定VARCHAR()时始终包含长度。默认长度因上下文而异,可能不够长。