2011-03-31 238 views
0

我有一個具有超過3000行代碼的存儲過程,如下所示。它是一個驗證業務規則的過程。對於來自不同表格的不同列有類似的查詢。我不知道如何將這些查詢結合在一起,所以我可以縮小這個過程。下面的查詢是該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

爲什麼要壓縮SP? – 2011-03-31 17:50:00

+0

我沒有看到上面的查詢有什麼問題。 「結合」這些查詢的含義是什麼?似乎只有一個查詢。 – Lamak 2011-03-31 17:52:18

+0

我只是想知道3000行代碼不應該影響性能。 – Programmer 2011-03-31 17:55:12

回答

0

除非在循環內部有查詢,否則將多個查詢合併爲一個通常是一個壞主意。首先,查詢可能有不同的列集,所以你必須找到一種聯合這些方法的方法。其次,較大的查詢往往會混淆優化器,因此與較小的查詢相比,一個大型查詢更有可能出現性能問題。從某種意義上說,你正在逆流而上,那就是「劃分並同意」成語。