ukulele
-
Gesamte Inhalte
68 -
Registriert seit
-
Letzter Besuch
Beiträge erstellt von ukulele
-
-
Ja in diesem Fall v1 und v2, die kannst du aber beliebig nennen.
-
Also zunächst mal habe ich mit LEFT JOINs gearbeitet so das der Hauptdatensatz deines originären Selects auf jeden Fall angezeigt wird. Dann habe jeweils zwei Join-Bedingungen weil es in der View n verknüpfte Datensätze gibt von denen ich aber nur einen bestimmten brauche.
Das ganze musste in zwei verschiedene Spalten (Fol und Etik) also habe ich die View doppelt gejoint, dazu muss man zwingend mit Tabellen-Aliasen arbeiten.
-
Du hast also originär 3 Abfragen, meinst du eventuell das hier?
SELECT VBSVORDT,
VBSVORZT,
VBSARTTX,
VBSHNDKL,
VBSURSLD,
VBSPALMG,
VBSPMENG,
VBSFPMNG,
VBSLGANR,
arttx,
VBSKUNNR,
KUNNAME,
VBSFOLNR,
VBSFOLET,
VBSKISZT,
VBSECKL,
VBSSANID,
VBSSANKI,
v1.PARLFD2 AS FolNr,
v1.PARINHA1 AS FolTxt,
v2.PARLFD2 AS EtikNr,
v2.PARINHA1 AS EtikTxt
FROM tbl_VBS
JOIN tbl_KUN
ON tbl_kun.KUNNR = tbl_vbs.VBSKUNNR
JOIN tbl_ART
ON tbl_art.ARTNR = tbl_vbs.VBSLGANR
LEFT JOIN view_PAR v1
ON VBSFOLET = v1.PARLFD2
AND v1.KEYIPAR1 LIKE 'EVARFFOLIENNUMMER%'
LEFT JOIN view_PAR v2
ON VBSFOLET = v2.PARLFD2
AND v2.KEYIPAR1 LIKE 'EVARFFOLIENETIKET%'
WHERE VBSADRNR = '005256'
AND convert(datetime,convert(char(10),VBSVORDT,104)) BETWEEN convert(datetime,convert(char(10),getdate(),104)) AND dateadd(dd,0,getdate()) -
Also ich verstehe den Thread nur in etwa bis Post #4, ich glaube du suchst das:
SELECT VBSVORDT,
VBSVORZT,
VBSARTTX,
VBSHNDKL,
VBSURSLD,
VBSPALMG,
VBSPMENG,
VBSFPMNG,
VBSLGANR,
arttx,
VBSKUNNR,
KUNNAME,
VBSFOLNR,
VBSFOLET,
VBSKISZT,
VBSECKL,
VBSSANID,
VBSSANKI,
PARLFD2 AS FolNr,
PARINHA1 AS FolTxt
FROM tbl_VBS
JOIN tbl_KUN
ON tbl_kun.KUNNR = tbl_vbs.VBSKUNNR
JOIN tbl_ART
ON tbl_art.ARTNR = tbl_vbs.VBSLGANR
LEFT JOIN view_PAR
ON VBSFOLET = view_PAR.PARLFD2
AND view_PAR.KEYIPAR1 LIKE 'EVARFFOLIENNUMMER%'
WHERE VBSADRNR = '005256'
AND convert(datetime,convert(char(10),VBSVORDT,104)) BETWEEN convert(datetime,convert(char(10),getdate(),104)) AND dateadd(dd,0,getdate()) -
Hier gibts eine Markierung für gelöst, im anderen Forum leider nicht.
-
-
Mail die Firewall ausgeschaltet?
-
Ich bin hierrüber gestolpert, habe es aber nicht getestet.
http://www.brentozar.com/archive/2008/09/finding-your-san-bottlenecks-with-sqlio/
-
Theoretisch ist das möglich, es bedeutet aber auch viel Aufwand.
Hast du bereits eine Datei erfolgreich importiert? Wie sind die Dateien auf dem Dateisystem strukturiert, individuelle Namen oder sind die irgendwie fortlaufwend abgelegt?
-
Das ist zunächst mal normal.
Das kann man ändern, ist aber nicht ganz einfach bei einer dynamischen Anzahl an Schauspielern pro Film. In diversen SQL Servern gibt es Funktionen wie GROUP_CONCAT etc. die diese Information aggregieren können. In MSSQL gibt es das so direkt leider nicht aber andere Möglichkeiten. Ein gängiger Trick nutzt XML Path, siehe hier:
http://sqlandme.com/2011/04/27/tsql-concatenate-rows-using-for-xml-path/
-
Bei MSSQL gibt es einen grafischen Ausführungsplan, im Management Studio gibt es dafür einen Button. Den kannst du dir ja mal für die unterschiedlichen Selects anzeigen lassen. Wenn sich ein Unterschied bemerkbar macht dann würde ich tippen das NOT IN die langsammste Variante ist.
-
Nichts anderes habe ich geschrieben, die Betonung lag auf zusätzlich im ersten Absatz.
Im zweiten Absatz plädiere ich aber für Abwägung zwischen laufendem Index oder nächtlichem oder anderweitig regelmäßigem full table scan.
-
Dafür gibts einige Wege z.B.:
SELECT a.id, a.vater, a.benutzer, a.rechner FROM beziehungen AS a LEFT JOIN beziehungen AS b ON a.id = b.vater AND a.benutzer = b.benutzer WHERE b.vater Is Null
oder
SELECT a.id, a.vater, a.benutzer, a.rechner FROM beziehungen AS a WHERE a.id NOT IN ( SELECT b.vater FROM beziehungen b WHERE b.benutzer = a.benutzer )
oder
SELECT a.id, a.vater, a.benutzer, a.rechner FROM beziehungen AS a WHERE a.id NOT EXISTS ( SELECT 1 FROM beziehungen b WHERE b.vater = a.id AND b.benutzer = a.benutzer )
-
Was ist denn ein "sprechender Delete-Befehl"?
DELETE FROM tabelle WHERE datum <= '2015-01-01' DELETE FROM tabelle WHERE pk <= 1000
Mit einem Index auf die jeweilige Spalte der WHERE Bedingung sollten gleich schnell sein. Für mich sind die auch beide "sprechend".
-
Ein fortlaufender PK mit Index sollte beim Löschen alter Datensätze genauso gut funktionieren wie eine Datumsspalte mit Index. Im ersten Fall musst du aber zusätzlich noch den PK ermitteln der dem Datum löschen bis entspricht, das musst du bei einem Index auf der Datumsspalte nicht.
Das ist aber auch ein Job den man theoretisch Nachts bei niedriger DB Nutzung fahren kann, ich glaube da darf man auch mal einen Full-Table Scan wagen. Es sei denn das soll wirklich mehrfach täglich ausgeführt werden, dann lohnen die Kosten für den Index.
-
Es sind ja nicht nur Faktoren Speicherplatz und Index Performance (die ich tatsächlich nicht gut selbst einschätzen kann) sondern auch Dinge wie Datenimport / Export. Daher erstmal die Eingangsfrage, was soll dein PK tun? Deine Wahl halte ich nicht für schlecht und mir fehlt selbst etwas das Gefühl für so große Tabellen aber es geht nichts gegen eine vernünftige Zielsetzung und die interessiert mich einfach :-) Vieleicht ist auch kein PK die schnellste Lösung...
-
Darf ich fragen warum du INT mit auto_increment einsetzen willst und nicht GUID?
Was soll der PK auf der Tabelle bewirken, wofür ist er da?
-
Eventuell reicht dir für die erste Software auch eine Express Version aus, die Versionen unterscheiden sich nur in ihrem Funktionsumfang etwas und in der maximalen größe der Datenank sowie in Nutzung von Kernen und RAM. Bei einer kleinen DB und einer Anwendung von der Stange reicht meist auch eine Express Version, technisch wird das nur selten geprüft.
-
So wie ich das verstehe dürfte deine Standard-Einstellung von 3.000 MB eigentlich keine Verbesserung bewirken sondern ~2.147 MB sollten das Maximum sein. Ich finde auch die VM Konfiguration mit 16 GB nur bedingt sinnvoll wenn "nur" eine 32 Bit DB betrieben wird.
Bisher wurde ich aber mit dem Problem auch noch nicht konfrontiert.
-
In diesem Fall sind die Datentypen der Spalten Anfang und Ende nicht unerheblich. Dies hier müsste aber so in etwa funktionieren:
SELECT Jahr, Ort, Produkt, datediff(hour,Anfang,Ende) AS EStd FROM ( SELECT year(Datum) AS Jahr, Ort, Produkt, Datum + cast(Anfang AS DATETIME) AS Anfang, ( CASE WHEN Ende <= Anfang THEN dateadd(day,1,Datum) + cast(Ende AS DATETIME) ELSE Datum + cast(Ende AS DATETIME) END ) AS Ende FROM Dispo ) tabelle GROUP BY Jahr,Ort,Produkt
Ich habe zunächst mal Anfang und Ende in ein DATETIME Format gebracht um sauber mit datediff() etc. arbeiten zu können. Das muss man natürlich nicht. Im Anschluss habe ich einen Select mit GROUP BY auf diese Abfrage ausgeführt, auch das kann man umstellen.
-
Vor allem, wurden die Dateien kopiert während der SQL Server lief oder wurden die Dienste vorher gestoppt?
-
-
SELECT round(cast(getdate() AS float),0)+1
wobei ich nicht verstehe warum Excel uns einen Tag vorraus ist.
- 1
-
Zugegeben, Windows ist mitlerweile ein sehr gutes OS und auch die Virtualisierungslösung ist sicher gut und günstig. Ich würde auch niemandem vom Einsatz abraten, bin aber durchaus eher ein Fan von VMware und wollte meine (subjektiven) Argumente und Erfahrungen nicht verheimlichen.
Hyper-V ist ja noch ein vergleichsweise junges Produkt im Markt. Ich bin mir relativ sicher das MS es querfinanziert um Marktanteile zu gewinnen. Gute Software verursacht eben Kosten, darüber sollte man sich immer klar sein. Den Einstieg bekommt man aber gut über ein Testsystem mit kostenloser Lizenz hin.
T-Sql Pivot abfrage mit dynamischen Spalten
in MS SQL Server Forum
Geschrieben
Du kannst mit weniger Variablen arbeiten, das ist aber auch schon alles. Was willst du sonst beim zusammenkleben von Code vereinfachen?
Oder bezieht sich deine Frage auf das zusammengebaute Query? Das könnte man dann ja auch direkt und formatiert posten..