将多个查询合并为一个

时间:2011-03-31 17:47:57

标签: sql

我有一个存储过程,具有如下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]) 

1 个答案:

答案 0 :(得分:0)

除非你在循环中有查询,否则将多个查询合并为一个通常是个坏主意。首先,查询可能具有不同的列集,因此您必须找到一种联合这些列的方法。其次,较大的查询往往会使优化器混淆,因此一个大型查询的性能问题比较小的查询更容易出现问题。从某种意义上说,你正在游走当前的“鸿沟和同意”成语。