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
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Hermann J. Leopold
-- Create date: 09.6.2011
-- Description: Glättet die Sortierungsspalte
-- =============================================
CREATE PROCEDURE [dbo].[spGlaetteSortierung]
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- temporäre Tabelle
DECLARE @Vorsortiert AS TABLE(ID bigint, Sortierung int)
-- Daten in die temporäre Tabelle schreiben
SELECT [ID], ROW_NUMBER() OVER (ORDER BY [Sortierung]) AS Sortierung
INTO #Vorsortiert FROM [test1].[dbo].[Sortiertest]
ORDER BY [Sortierung]
-- Tabelle 'Sortiertest' aktualisieren
UPDATE [test1].[dbo].Sortiertest
SET [Sortiertest].[Sortierung] = #Vorsortiert.Sortierung * 2
FROM #Vorsortiert
INNER JOIN [Sortiertest] ON #Vorsortiert.ID = [Sortiertest].[ID]
END
GO
Hinweis
Diese Stored Procedure ist nur ein Muster; es fehlt insbesondere jegliche Form von Fehlerbehandlung.
Die Tabelle zum obigen Beispiel
USE [test1]
GO
/****** Object: Table [dbo].[Sortiertest] Script Date: 06/11/2011 10:48:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Sortiertest](
[ID] [bigint] IDENTITY( 1, 1) NOT NULL,
[Muster] [nchar]( 10) NULL,
[Sortierung] [int] NOT NULL,
CONSTRAINT [PK_Sortiertest] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
Speicherort
SQL-Scripte; Asus
SQLQuery3.sql
Keine Kommentare:
Kommentar veröffentlichen