我在这样的查询中选择了一些字段:
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()
时始终包含长度。 默认长度因上下文而异,可能不够长。