我在这样的查询中选择了一些字段:
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%。
我的问题是,从性能角度来看,这是否是最佳解决方案?我最好在子串之前检查第一个长度吗?
答案 0 :(得分:2)
不要担心此类性能微观改进 - 您已经在进行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()
时始终包含长度。默认长度因上下文而异,可能不够长。