select 语句执行时没有错误或警告。
更新语句抛出错误:
关键字“group”附近的语法不正确。
select [sSVsys].[textUniqueWordCount], count(*) as [actCount]
from [docSVsys] as [sSVsys]with (nolock)
join [FTSindexWordOnce] with (nolock)
on [sSVsys].[sID] = [FTSindexWordOnce].[sID]
where [sSVsys].[sID] < 500000
group by [sSVsys].[sID], [sSVsys].[textUniqueWordCount]
having [sSVsys].[textUniqueWordCount] <> count(*)
update [sSVsys]
set [sSVsys].[textUniqueWordCount] = count(*)
from [docSVsys] as [sSVsys]with (nolock)
join [FTSindexWordOnce] with (nolock)
on [sSVsys].[sID] = [FTSindexWordOnce].[sID]
where [sSVsys].[sID] < 500000
group by [sSVsys].[sID], [sSVsys].[textUniqueWordCount]
having [sSVsys].[textUniqueWordCount] <> count(*)
如果答案是连接到派生表,那么我可以弄清楚。
现有更新是否存在语法错误?
这个派生表有效
update [docSVsys]
set [docSVsys].[textUniqueWordCount] = [WordOnce].[actCount]
from [docSVsys]
join
( select [FTSindexWordOnce].[sID], count(*) as [actCount]
from [FTSindexWordOnce] with (nolock)
-- where [FTSindexWordOnce].[sID] < 1500000
group by [FTSindexWordOnce].[sID] ) as [WordOnce]
on [docSVsys].[sID] = [WordOnce].[sID]
and [docSVsys].[textUniqueWordCount] <> [WordOnce].[actCount]
我会将其保留几天,以获取有关更好方法的任何评论或答案,然后删除。这种方法存在于现有的 SO 答案中。
您原来的更新语句包含 GROUP BY 和 HAVING,这在 UPDATE 语句语法中是不允许的。这是语法图的链接:更新 (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms177523.aspx.
您的第二个版本将 GROUP BY 和 HAVING 作为派生表的一部分,其中is允许。
所以,是的:你确实有一个语法错误。
顺便说一句,我同意@bluefeet:用 CTE 代替派生表将使您的更新更易于阅读和理解。虽然是一件小事,但它可以在维护的便利性方面产生很大的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)