2 Tabellen vergleichen u. Daten die nicht in beiden sind, löschen!

L17

Grünschnabel
Hallo Community,

Wie ich in meiner Überschrift schon schreibe, ich habe 2 Tabellen in einer SQL Datenbank liegen, beide beinhalten neben zahlreichen Daten auch den Datensatz "Artikelnummer".
Jetzt möchte ich diese 2 Tabellen in eine fassen (Was mir mit "zusammenführen" auch gelungen ist, jedoch stehen die leeren Datensätze immernoch drinne).

In einer der 2 Tabellen fehlt jedoch des öfteren der Wert für "Artikelnummer", fehlt dieser soll der Datensatz gelöscht werden. Nurl, wie mach ich das am geschicktesten?:confused:

Über Ideen und Ratschläge würde ich mich freuen!
 
Hallo Community,

Wie ich in meiner Überschrift schon schreibe, ich habe 2 Tabellen in einer SQL Datenbank liegen, beide beinhalten neben zahlreichen Daten auch den Datensatz "Artikelnummer".
Jetzt möchte ich diese 2 Tabellen in eine fassen (Was mir mit "zusammenführen" auch gelungen ist, jedoch stehen die leeren Datensätze immernoch drinne).

In einer der 2 Tabellen fehlt jedoch des öfteren der Wert für "Artikelnummer", fehlt dieser soll der Datensatz gelöscht werden. Nurl, wie mach ich das am geschicktesten?:confused:

Über Ideen und Ratschläge würde ich mich freuen!

DELETE * FROM myTable WHERE Artikelnummer=""
 
Aufgabe:

Eine Liste mit Artikeln; die ohne Anr sollen raus.
Alles in EINE Tabelle der Datenbank Quasar3.

Quelle: - Einzelstatistik u. Stammdaten der Artikel
- (Tabellen dbo.es u. dbo.ar der Datenbank Quasar3)
- in der Einzelstatistik stehen leere Datensätze
- diese gilt es zu löschen
- Einzelstatistik und Stammdaten müssen nun in EINE Tabelle gefasst werden

Ziel: - Alle Daten in EINE neue Tabelle der Datenbank schreiben.
-(Tabelle dbo.ES_NEU der Datenbank Quasar3)

Hinweise:

- Die Datenbank befindet sich auf einem SQL-Server
- gearbeitet habe ich mit dem Integration Service unter dem SSBIDS
- Wie und wo, baue ich den Befehl "DELETE * FROM dbo.es WHERE es_arnr=" ein?

Problem:

- Die leeren Datensätze der Tabelle dbo.es (speziell es_arnr) löschen
- Daten werden nicht in die Tabelle geschrieben (Es wird jedoch kein Fehler angezeigt)
 
Zuletzt bearbeitet:
Aufgabe:

- Wie und wo, baue ich den Befehl "DELETE * FROM dbo.es WHERE es_arnr=" ein?

Das ist ANSI-SQL und jede DB-Anwendung hat irgendwo eine Funktion, wo man direkt einen SQL-Befehl eingeben kann.

Je nach SQL-Dialekt kann es auch "... WHERE IsNull(es_anr)" heissen oder ähnlich, musst du selbst rausfinden.

Um Daten aus zwei Tabellen in eine zusammenzufügen ist das SQL-Schlüsselwort "UNION" dein Freund.

Um Daten aus einer Tabelle in eine andere zu kopieren ist das SQL-Schlüsselwort "INTO" dein Freund, allerdings weiss ich es gerade nicht aus dem Kopf ob es "SELECT * INTO myNewTable FROM myOldTable" heisst oder "SELECT * FROM myOldTable INTO myNewTable". --> ausprobieren.
 
  • Gefällt mir
Reaktionen: L17
Hallo,

zurzeit funktioniert alles, bis auf das Löschen -.-

Er führt die 2 Tabellen richtig zusammen, schreibt sie auch in eine neue etc.

beim Löschen bringt er mir jedoch noch diesen Fehler:

"Ein OLE DB-Datensatz ist verfügbar. Quelle: 'Microsoft SQL Native Client' HRESULT: 0x80040E14 Beschreibung: 'Die gespeicherte Prozedur 'DELETE * FROM dbo.es WHERE es_arnr=' wurde nicht gefunden.'.
Fehler: 0xC0202009 bei Datenflusstask, Befehl zum Zeilenlöschen 1 [1]: OLE DB-Fehler. Fehlercode: 0x80040E14."

Er findet die Prozedur nicht, wie behebe ich diesen Fehler?

mfg und Danke.
 
Diverse DB-Systeme unterstützen sogenannte "gespeicherte Prozeduren", was nix anderes ist als SQL-Anweisungen, denen ein Name gegeben wurde und permanent in der DB gespeichert sind.

Wahrscheinlich gibt es in deinem DB-System irgendwo die Option "Erstelle neue gespeicherte Prozedur" oder etwas in der Art. Das aufrufen, einen Namen vergeben (Bsp. "LöscheLeereSätze"), und die DELETE-Anweisung eintragen.

Die gespeicherte Prozedur "LöscheLeereSätze" rufst du dann im Prinzip wie jede andere DB-Tabelle auf

DB.OpenRecordset("LöscheLeereSätze") oder ähnlich

Hallo,

zurzeit funktioniert alles, bis auf das Löschen -.-

Er führt die 2 Tabellen richtig zusammen, schreibt sie auch in eine neue etc.

beim Löschen bringt er mir jedoch noch diesen Fehler:

"Ein OLE DB-Datensatz ist verfügbar. Quelle: 'Microsoft SQL Native Client' HRESULT: 0x80040E14 Beschreibung: 'Die gespeicherte Prozedur 'DELETE * FROM dbo.es WHERE es_arnr=' wurde nicht gefunden.'.
Fehler: 0xC0202009 bei Datenflusstask, Befehl zum Zeilenlöschen 1 [1]: OLE DB-Fehler. Fehlercode: 0x80040E14."

Er findet die Prozedur nicht, wie behebe ich diesen Fehler?

mfg und Danke.
 
okay, nach einigem Suchen haben ich rausgefunden, wie man so eine Prozedur erstellt / speichert, man bekommt eine Vorlage:

-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO



In dieser ist nun der Befehl zu definieren, aber da scheitere ich dran, solche Künste in Sachen Programmierung unter VB habe ich leider noch nicht. :(

"DELETE * FROM dbo.ES_neU WHERE es_arnr=" ist nun !!NICHT!! mehr der Befehl, da dieser leider garnicht funktionierte..da bräuchte ich also auch einen neuen -.- leider

.wäre wirklich nett, wenn ihr mir an dieser Stelle nochmal helfen könntet :)
 
Zuletzt bearbeitet:
Zurück