Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi INSERT INTO SELECT mit Subselect funktioniert nicht mehr (https://www.delphipraxis.net/121297-insert-into-select-mit-subselect-funktioniert-nicht-mehr.html)

HeikoAdams 25. Sep 2008 09:00

Datenbank: MS SQL • Version: 2000 SP4 • Zugriff über: ADO

INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Hallo,
ich habe zur Zeit ein merkwürdiges Problem mit dem SQL Server 2000. In unserer Produktdatenbank wird in vielen Storedprocedures ein Insert-Statement der folgenden Art und Weise:
SQL-Code:
INSERT INTO ab SELECT c FROM d WHERE e NOT IN (SELECT f FROM g)
Bislang wurden diese Inserts vom SQL Server anstandslos ausgeführt. Jedoch ist es seit dem letzten Hotfix-Update so, das der SQL Server diese Prozeduren mit der Fehlermeldung "... Die Unterabfrage liefert mehr als ein Ergebnis zurück ..." abbricht.

Hat jemand das selbe Problem, oder weiß jemand, wie man den SQL Server dazu bringen kann, das "alte" Verhalten wieder zu aktivieren??

Gruß

Union 25. Sep 2008 09:10

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Das Problem liegt in
SQL-Code:
WHERE e NOT IN (SELECT f FROM g)
Die Fehlermeldung ist wohl aussagekräftig genug. Der Pseudocode f darf nur genau ein Feld bezeichnen, das typengleich mit e sein muss, also z.b. auf keinen Fall *.

HeikoAdams 25. Sep 2008 09:12

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Zitat:

Zitat von Union
Das Problem liegt in
SQL-Code:
WHERE e NOT IN (SELECT f FROM g)
Die Fehlermeldung ist wohl aussagekräftig genug. Der Pseudocode f darf nur genau ein Feld bezeichnen, das typengleich mit e sein muss, also z.b. auf keinen Fall *.

Das ist mir schon klar, nur ist es so, das dieser Code bislang Fehlerfrei ausgeführt wurde und nun auf einmal eine Fehlermeldung auslöst. Und solch eine Änderung im Programmverhalten erwarte ich absolut nicht bei einem Hotfix :wall:

nahpets 25. Sep 2008 09:39

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Hallo,

SQL-Code:
create table ab
( c int
);

create table d
( c int,
  e int
);

create table g
( f int
);

insert into g (f) values (1);
insert into g (f) values (2);
insert into g (f) values (3);
insert into g (f) values (4);
insert into g (f) values (5);
insert into g (f) values (6);

insert into d (c,e) values (1,2);
insert into d (c,e) values (3,4);
insert into d (c,e) values (5,6);
insert into d (c,e) values (7,8);
insert into d (c,e) values (9,10);
insert into d (c,e) values (11,12);
insert into d (c,e) values (17,14);

insert into ab select c from d where e not in (select f from g);

select * from ab

select * from d

select * from g
getestet gegen SQL-Server 2005 und Postgres 8.3: funktioniert.
Sieht schwer nach einem Fehler im Hotfix aus :x.

Stephan

PS: War der Hotfix erforderlich? Wenn nein, rückgängig machen (Never touch...)

HeikoAdams 25. Sep 2008 09:45

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Zitat:

Zitat von nahpets
War der Hotfix erforderlich? Wenn nein, rückgängig machen (Never touch...)

Soweit ich mich erinnere, war es ein Sicherheitsupdate, da der Hotfix über das automatische Update von Windows ausgeliefert wurde.

nahpets 25. Sep 2008 09:58

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Zitat:

Zitat von HeikoAdams
Zitat:

Zitat von nahpets
War der Hotfix erforderlich? Wenn nein, rückgängig machen (Never touch...)

Soweit ich mich erinnere, war es ein Sicherheitsupdate, da der Hotfix über das automatische Update von Windows ausgeliefert wurde.

Naja, das ist für mich kein Argument.
Das automatische Update von Windows ist bei mir immer ausgeschaltet, habe schon zu oft Systeme reparieren oder neu Aufsetzen müssen, weil da verschlimmbessert wurde. Da mach' ich mir lieber die Arbeit und prüfe, was ich brauche. Und das wird vorher an einem System getestet, dass ggfls. nach dem Test "weggeworfen" werden kann. Kann mir keinen Produktionsausfall wegen schiefgelaufener Sicherheitsupdates leisten.

Und in Bezug auf Hotfix sollte man immer das im Auge behalten: Schneider nennen das mit der heißen Nadel stricken :!:

Stephan

Elvis 25. Sep 2008 10:09

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Zitat:

Zitat von Union
Das Problem liegt in
SQL-Code:
WHERE e NOT IN (SELECT f FROM g)
Die Fehlermeldung ist wohl aussagekräftig genug. Der Pseudocode f darf nur genau ein Feld bezeichnen, das typengleich mit e sein muss, also z.b. auf keinen Fall *.

Nö, die Meldung macht absolut keinen SInn.
"not in" Soll ja selbst eine Erbnismenge liefern in der dein Wert nicht vorkommen soll. ;-)

Ansonsten ganz der Meinung von nahpet: kein Autoupdate auf einem Server. Erst recht nicht bei einem DB Server.

Wir werden hier in den nächsten Monaten komplett auf Virtualisierung setzen wodurch wir Updates immer in einem Clone testen können um dann eine sichere Entscheidung treffen zu können.
Das eine oder andere Update hat usn nämlich auch schon Kopfschmerzen bereitet. Manche Fixes waren nämlich nicht immer so leicht aus dem Weg zu gehen. (offene Scheunentore... äh Lücken im IIS zum Beispiel... :? )

HeikoAdams 25. Sep 2008 10:59

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Nur zur Info: Wir reden von diesem Hotfix: http://www.microsoft.com/technet/sec.../ms08-040.mspx

nahpets 25. Sep 2008 11:22

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Hallo Heiko,
Zitat:

Zitat von HeikoAdams
Nur zur Info: Wir reden von diesem Hotfix: http://support.microsoft.com/?scid=k...943677&x=5&y=9

hattet Ihr bei eurem System das dort beschriebene Problem?
Dort steht ausdrücklich, Hotfix nur auf solchen Systemen einsetzen, bei denen das Problem auftrat.
Hattet Ihr das Problem nicht, versucht den Hotfix wegzubekommen (oder System neu aufsetzen ohne den Hotfix).

Und Bittebitte: Hotfixe nur dann und wirklich nur dann, wenn das von den Hotfixen zu behebende Problem wirklich aufgetreten ist. Wir hatten schon zuviele Seiteneffekte und zerschossenen Systeme.

Eventuell frag' mal unter www.administrator.de, ob Dir dort jemand helfen kann, habe per Google und Co. keine Infos über Fehler oder Seiteneffekte zu dem Hotfix finden können.

Stephan

HeikoAdams 25. Sep 2008 13:46

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Mein Fehler. Ich hatte mein Posting anscheinend zuspät korrigiert.

nahpets 25. Sep 2008 14:07

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Hallo Heiko,
Zitat:

Zitat von HeikoAdams
Mein Fehler. Ich hatte mein Posting anscheinend zuspät korrigiert.

hin oder her, ob Hotfix oder Sicherheitsupdate. Sowas darf nicht passieren. Microsoft bietet aber auf der von Dir verlinkten Seite kostenlosen Support bei Problemen an, die auf der Seite nicht aufgeführt sind.

Laßt die Jungs mal schwitzen.
Meine Erfahrung mit denen ist bisher: Wenn man ein echtes Problem hat und dies gut begründet und ggfls. sogar nachvollziehbar darstellt, dann setzen die bis zur Lösung des Problemes ihren gesamten Apparat in Bewegung, da müssen auch die Entwickler in Redmond, Israel und Indien aus dem Bett und geben erst Ruhe, wenn man sagt: Ja, das Problem ist weg (hatte bisher noch nicht das Pech, ein unlösbares Problem zu finden).

Stephan

HeikoAdams 25. Sep 2008 14:21

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Zitat:

Zitat von nahpets
hin oder her, ob Hotfix oder Sicherheitsupdate. Sowas darf nicht passieren. Microsoft bietet aber auf der von Dir verlinkten Seite kostenlosen Support bei Problemen an, die auf der Seite nicht aufgeführt sind.

Also wenn ich mich zum deutschen Support durchklicke, dann lande ich auf http://support.microsoft.com/oas/def...53&gprid=25726 und dort steht nix von kostenlos. :evil: Die Preise dort sind richtig heftig.

nahpets 25. Sep 2008 14:36

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Hallo Heiko,
Zitat:

Zitat von HeikoAdams
Zitat:

Zitat von nahpets
hin oder her, ob Hotfix oder Sicherheitsupdate. Sowas darf nicht passieren. Microsoft bietet aber auf der von Dir verlinkten Seite kostenlosen Support bei Problemen an, die auf der Seite nicht aufgeführt sind.

Also wenn ich mich zum deutschen Support durchklicke, dann lande ich auf http://support.microsoft.com/oas/def...53&gprid=25726 und dort steht nix von kostenlos. :evil: Die Preise dort sind richtig heftig.

MS, wie ich es liebe :cry:

Schau bitte mal unter http://www.microsoft.com/germany/tec.../ms08-040.mspx. Ziemlich weit unten steht Support:
Zitat:

Zitat von http://www.microsoft.com/germany/technet/sicherheit/bulletins/ms08-040.mspx
Support

• Technischer Support ist über die Microsoft Support Services erhältlich. Supportanrufe zu Sicherheitsupdates sind kostenlos.

• Kunden außerhalb der USA erhalten Support bei ihren regionalen Microsoft-Niederlassungen. Supportanfragen zu Sicherheitsupdates sind kostenlos. Weitere Informationen dazu, wie Sie Microsoft in Bezug auf Supportfragen kontaktieren können, finden Sie auf der International Support-Website.

Das muss einen Versuch wert sein, andernfalls ist das schon fast eine Abmahnung wert :wink:

Stephan

HeikoAdams 25. Sep 2008 15:22

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Problem gefunden:
Ein Kollege hat einen Trigger geändert, ohne das zu dokumentieren :evil:
Und dreimal darf geraten werden, was die Ursache der Probleme war: Der geänderte Trigger :wall:

nahpets 25. Sep 2008 15:27

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Hallo Heiko,
Zitat:

Zitat von HeikoAdams
Problem gefunden:
Ein Kollege hat einen Trigger geändert, ohne das zu dokumentieren :evil:
Und dreimal darf geraten werden, was die Ursache der Probleme war: Der geänderte Trigger :wall:

hau Ihn, das ist jetzt aber mindestens 'ne Kiste Bier wert :) oder dreimal Deckel zahlen :zwinker: .

Stephan

HeikoAdams 25. Sep 2008 15:36

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Zitat:

Zitat von nahpets
hau Ihn, das ist jetzt aber mindestens 'ne Kiste Bier wert :) oder dreimal Deckel zahlen :zwinker: .

Werd ich machen und obendrei bekommt er noch "Ich muss alle Änderungen dokumentieren" als Wallpaper 8)

Union 25. Sep 2008 16:03

Re: INSERT INTO SELECT mit Subselect funktioniert nicht mehr
 
Zitat:

Ein Kollege hat einen Trigger geändert, ohne das zu dokumentieren
Was ist wohl schlimmer: Die fehlende Dokumentation oder dass es von ihm auch nicht getestet worden sein kann?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz