itrain-home BASTA! Spring 2012  
home
 Aktuelle Seite:  knowhow sql tsql misc null_eliminator_final.asp 
 



 

Transact SQL Script: Null_eliminator_final.SQL

questions? mailto:info@itrain.de

Download SQL Script

Dieses Script dient nur Demonstrationszwecken. Verwendung des Scripts erfolgt auf eigene Gefahr.


  
 IF EXISTS (SELECT * FROM sysobjects WHERE name = 'sp_MORE_THAN_n_NULL_VALUES' AND type='P')  
  DROP PROCEDURE sp_MORE_THAN_n_NULL_VALUES  
 GO  
 CREATE PROCEDURE sp_MORE_THAN_n_NULL_VALUES  
 -- Prozedur : sp_MORE_THAN_n_NULL_VALUES  
 -- Autor    : svenh@itrain.de  
 -- Löscht bzw. selektiert alle Datensätze aus der Tabelle @tabelle,  
 -- bei denen mehr als @maxNullCols einen Nullwert enthalten  
 -- @modus = 'SELECT' SElektieren; @modus = 'DELETE' - Löschen  
  @modus varchar(20) = 'SELECT',  
  @tabelle sysname,   
  @maxNullCols int = 10  
   
 AS   
 SET CONCAT_NULL_YIELDS_NULL ON  
   
 DECLARE @strSELECT varchar(8000)  
 -- Prüfen, ob gültiger Modus angegeben wurde  
 IF NOT @modus IN ('SELECT', 'DELETE')   
 BEGIN  
  RAISERROR ('Ungültiger Modus. Nur SELECT und DELETE erlaubt', 10, 1)  
  RETURN -1  
 END  
 ELSE  
 BEGIN  
 -- Prüfen, ob Tabelle existiert  
 IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.Tables WHERE TABLE_NAME = @tabelle)  
 BEGIN  
  RAISERROR ('Tabelle nicht vorhanden. Prozedur abgebrochen.', 10,1)  
  RETURN -1  
 END  
 ELSE  
 BEGIN  
 -- Zusammensetzen der CASE-Bedingungen für jede Spalte  
  SELECT @strSELECT =   
   ISNULL(@strSELECT + ' + CASE WHEN ' + column_name + '  IS NULL THEN 1 ELSE 0 END',   
   'CASE WHEN ' + column_name + ' IS NULL THEN 1 ELSE 0 END') FROM INFORMATION_SCHEMA.COLUMNS  
   WHERE TABLE_NAME = @tabelle  
   ORDER BY ordinal_position  
  SET @strSELECT = @strSELECT + ' > ' + CAST(@maxNullCols As varchar(3))  
  IF @modus = 'DELETE'  
   SET @strSELECT = 'DELETE FROM ' + @tabelle + ' WHERE ' + @strselect  
  ELSE  
   SET @strSELECT = 'SELECT * FROM ' + @tabelle + ' WHERE ' + @strSELECT  
 -- Ausführen der DELETE/SELECT-Anweisung  
  EXEC (@strSELECT)  
 -- Rückgabe der Anzahl der betroffenen Zeilen  
  RETURN @@ROWCOUNT  
 END  
 END  
 GO  
   
   
 -- Testscript mit Beispieltabelle zum Testen der Prozedur  
 IF OBJECT_ID('TESTNULLVAL', 'U') IS NOT NULL DROP TABLE TESTNULLVAL  
 GO  
 CREATE TABLE TESTNULLVAL(spalte1 int NULL, spalte2 int NULL, spalte3 int NULL, spalte4 int NULL)  
 GO  
 INSERT INTO TESTNULLVAL  
 SELECT 1, 2, 3, 4  
 UNION  
 SELECT 1, 2, 3, NULL  
 UNION  
 SELECT 1, 2, NULL, NULL  
 UNION  
 SELECT 1, NULL, 3, NULL  
 UNION  
 SELECT 1, NULL, NULL, NULL  
 GO  
 SELECT * FROM TESTNULLVAL  
 EXEC sp_MORE_THAN_n_NULL_VALUES 'SELECT', 'TESTNULLVAL', 1  
 EXEC sp_MORE_THAN_n_NULL_VALUES 'SELECT', 'TESTNULLVAL', 2  
 -- oder  
 EXEC sp_MORE_THAN_n_NULL_VALUES 'DELETE', 'TESTNULLVAL', 2  
 SELECT * FROM TESTNULLVAL
Leerraum

Dokument zum Drucken anzeigen
English Pages
Link-Tipp zum Thema "Microsoft SQL Server": www.sqldts.com/

Sehr schöne Site zum Thema "Data Transformation Services"