Jump to content

ukulele

Members
  • Gesamte Inhalte

    68
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von ukulele

  1. 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..
  2. Ja in diesem Fall v1 und v2, die kannst du aber beliebig nennen.
  3. 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.
  4. 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())
  5. 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())
  6. Hier gibts eine Markierung für gelöst, im anderen Forum leider nicht.
  7. Crosspost http://www.datenbankforum.com/threads/max-und-primaerschluessel.2694/
  8. Ich bin hierrüber gestolpert, habe es aber nicht getestet. http://www.brentozar.com/archive/2008/09/finding-your-san-bottlenecks-with-sqlio/
  9. 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?
  10. 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/
  11. 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.
  12. 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.
  13. 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 )
  14. 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".
  15. 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.
  16. 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...
  17. 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?
  18. 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.
  19. 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. http://blogs.msdn.com/b/sqlosteam/archive/2012/07/12/memory-manager-configuration-changes-in-sql-server-2012.aspx Bisher wurde ich aber mit dem Problem auch noch nicht konfrontiert.
  20. 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.
  21. Vor allem, wurden die Dateien kopiert während der SQL Server lief oder wurden die Dienste vorher gestoppt?
  22. Crosspost: http://www.datenbankforum.com/threads/vorname-und-nachname-trennen.2386/
  23. ukulele

    Convert: Date to int

    SELECT round(cast(getdate() AS float),0)+1 wobei ich nicht verstehe warum Excel uns einen Tag vorraus ist.
  24. 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.
×
×
  • Neu erstellen...