我有一个存储过程,具有如下3000行代码。它是一个验证业务规则proc。对于来自不同表的不同列,存在类似的查询。我不知道如何将这些查询组合在一起,这样我就可以缩小这个过程。下面的查询是该proc的一部分,每个列及其各自的表有许多类似的查询。我正在使用SQL Server 2005。
INSERT INTO
[Elig].[dbo].[ErrorTable]
(
[SeqId],
[CodeId],
[SubjectArea],
[FieldName],
[TableName],
[ErrorValue],
[ActiveFlag]
)
SELECT
[sd].[SubscriberDataId] AS [SeqId],
@InvalidLength AS [CodeId],
@SubjectArea AS [SubjectArea],
'FacetsGroup' AS [FieldName],
'Facets.SubscriberData',
[sd].[SubscriberFirstName] AS [ErrorValue],
@ActiveFlag AS [ActiveFlag]
FROM
[Facets].[SubscriberData] [sd]
WHERE
ISNUMERIC([FacetsGroup]) = 0 and
NOT EXISTS (SELECT *
FROM Elig.dbo.ErrorTable
WHERE TableName = 'Facets.SubscriberData'
AND FieldName = 'FacetsGroup'
AND ErrorValue = [sd].[FacetsGroup])
答案 0 :(得分:0)
除非你在循环中有查询,否则将多个查询合并为一个通常是个坏主意。首先,查询可能具有不同的列集,因此您必须找到一种联合这些列的方法。其次,较大的查询往往会使优化器混淆,因此一个大型查询的性能问题比较小的查询更容易出现问题。从某种意义上说,你正在游走当前的“鸿沟和同意”成语。