Samstag, 11. Juni 2011

Ordnen der Datenbank-Sortierung nach Art des Hauses via Stored Procedure

Hinweis:
Dieser Beitrag macht nur für mich Sinn; nicht wundern.

Diese Stored Procedure ist ein Muster für die Neuordnung der "Sortierung"-Spalte nach einer Umsortierung. Die Namen des Schemas, der Tabelle und der Sortierungsspalte sind fix, da dynamisches SQL lt. diverser Autoren Performanceeinbußen bringt.
Da hingegen das Datenbankdesign bezüglich der Sortierung unveränderlich ist, sollte pro Tabelle eine Stored Procedure keine unüberwindliche Hürde darstellen.

Das "Create"-Statement

  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5.  
  6. -- =============================================
  7. -- Author: Hermann J. Leopold
  8. -- Create date: 09.6.2011
  9. -- Description: Glättet die Sortierungsspalte
  10. -- =============================================
  11. CREATE PROCEDURE [dbo].[spGlaetteSortierung]
  12. AS
  13. BEGIN
  14. -- SET NOCOUNT ON added to prevent extra result sets from
  15. -- interfering with SELECT statements.
  16. SET NOCOUNT ON;
  17.  
  18.      -- temporäre Tabelle
  19. DECLARE @Vorsortiert AS TABLE(ID bigint, Sortierung int)
  20. -- Daten in die temporäre Tabelle schreiben
  21. SELECT [ID], ROW_NUMBER() OVER (ORDER BY [Sortierung]) AS Sortierung
  22. INTO #Vorsortiert FROM [test1].[dbo].[Sortiertest]
  23. ORDER BY [Sortierung]
  24. -- Tabelle 'Sortiertest' aktualisieren
  25. UPDATE [test1].[dbo].Sortiertest
  26. SET [Sortiertest].[Sortierung] = #Vorsortiert.Sortierung * 2
  27. FROM #Vorsortiert
  28. INNER JOIN [Sortiertest] ON #Vorsortiert.ID = [Sortiertest].[ID]
  29. END
  30. GO
  31.  

Hinweis

Diese Stored Procedure ist nur ein Muster; es fehlt insbesondere jegliche Form von Fehlerbehandlung.

Die Tabelle zum obigen Beispiel

  1. USE [test1]
  2. GO
  3.  
  4. /****** Object: Table [dbo].[Sortiertest] Script Date: 06/11/2011 10:48:34 ******/
  5. SET ANSI_NULLS ON
  6. GO
  7.  
  8. SET QUOTED_IDENTIFIER ON
  9. GO
  10.  
  11. CREATE TABLE [dbo].[Sortiertest](
  12. [ID] [bigint] IDENTITY( 1, 1) NOT NULL,
  13. [Muster] [nchar]( 10) NULL,
  14. [Sortierung] [int] NOT NULL,
  15.   CONSTRAINT [PK_Sortiertest] PRIMARY KEY CLUSTERED
  16. (
  17. [ID] ASC
  18. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  19. ) ON [PRIMARY]
  20.  
  21. GO
  22.  

Speicherort

SQL-Scripte; Asus

SQLQuery3.sql

Keine Kommentare: