T-SQL:字段的子字符串



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

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的 URL 比我的目的地可以容纳的要长。

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

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

并非所有 URL 都会超过该限制,只有大约 1%。

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

不要担心这样的性能微改进 - 你已经在做一个join和一个select 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()时始终包含长度。 默认长度因上下文而异,可能不够长。

相关内容

最新更新