Einsatz von EXCEPT in Insert Into Anweisung

Babsi

SQL-Guru
Beiträge
122
Hallo,

ich habe folgenden Code:

insert into dbo.[test] (
[feld1]
, [feld2]
, [feld3]
, [feld4]
, [feld5]
)

select
@value1 as [feld1]
, @value2 as feld2
, value3 as [feld3]
, value4 as [feld4]
, value5 as [feld5]
)
from #testvalues

EXCEPT

SELECT
[feld1]
, [feld2]
, [feld3]
, [feld4]
, [feld5] FROM dbo.[test]

Ich befülle also eine Tabelle mit daten aus variablen, aber nur solche, die noch nicht in der Tabelle dbo.test enthalten sind. Das sollet dieser Code auch umsetzen, sehe ich das richtig?
 
Werbung:
Naja deine value1 und 2 sind Variablen die mit Werten (value3 bis 5) aus einer Tabelle #testvalues gejoint werden. Jeder Datensatz aus #testvalues wird dann auch einen Datensatz in dbo.text liefern sofern diese Kombination in dbo.text nicht schon enthalten ist. Ob das so Sinn ergibt kann ich nicht beurteilen, kann sein, muss aber nicht.
 
Ich habs gerade mal umgeschrieben, da ich aktuell auch damit viel zu tun habe.
SQL:
insert into dbo.[test]
select daten.*
(
select
@value1 as [feld1], @value2 as feld2, value3 as [feld3], value4 as [feld4], value5 as [feld5]
from #testvalues
EXCEPT
SELECT
[feld1], [feld2], [feld3], [feld4], [feld5] 
FROM dbo.[test]
) as daten
Was sich mir nicht erschließt ist, warum Du im ersten select mit konstanten Werten (value1 - 5) arbeitest. Denn, Beispiel: select 'Konstante' as feld1 from table liefert die Anzahl Zeilen in table mit 'Konstante' als Zeilenwert.
Daher denke ich wäre es so korrekt:
SQL:
insert into dbo.[test]
select daten.*
(
select [feld1],feld2,[feld3],[feld4],[feld5]
from #testvalues
EXCEPT
SELECT
[feld1], [feld2], [feld3], [feld4], [feld5] 
FROM dbo.[test]
) as daten
So mach ich das aktuell in meinem Projekt.
 
Naja das kann sinnvoll sein wenn man sowas wie Attribute / Einstellungen oder was auch immer von einem zum anderen Datensatz kopieren will, dann sind feld1 und feld2 irgendwelche Schlüssel und feld3 bis 5 Werte, .z.B. im EAV Prinzip. Also wie gesagt kann richtig sein, muss aber nicht. Kann man machen, wird dann eventuell scheiße :)
 
Hallo,

entschuldigt bitte meine späte Rückmeldung.
Ich kannte diesen Except noch nicht und war unsicher. daher die Frage.

Value1 und Value2 sind Variablen. Ich möchte ja lediglich ein Select angeben, mit dem dann Daten in eine Tabelle geschrieben werden, da sind eben Variablen dabei. Dann will ich aber ausschließen, dass Werte, die schon in der der Zieltabelle enthalten sind eben nicht ringeschrieben werden.

Und das sollte doch dann so auch klappen, ich kann das ja auch anders lösen(WHERE NOT IN(usw)).

@ukulele was genau wäre daran denn scheiße :cool:
 
Hallo ukulele,

verstehe ich nicht, es gibt eine Datei, die eingelesen wird. Das sind diese Variablen..
Dann wird mit dem Select in die dbo.[test] geschrieben, aber nur, die Daten, die nicht schon in dbo.[test] sind.
Wieso könnten da unerwartet mehr Einträge drin sein. Alles aus testvalues soll in Test, nur nicht die, die schon drin sind.
Also keine doppelten Einträge.

Gruß, Babsi
 
Zuletzt bearbeitet:
Sry aber ich werde mir da jetzt kein Beispiel konstruieren wo das schief gehen kann. Deine Baustelle das zu testen, wenn es klappt ist ja okay.
 
Ich habe gerade 2 Testtabellen erstellt | A und B. Aus der A, bis auf 1 DS alles gelöscht und dann mit einem Insert aus der B alles in A geschrieben.
Also hat super funktioniert.
 
Werbung:
Zurück
Oben