Jump to content

tutter

Members
  • Gesamte Inhalte

    75
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von tutter

  1. alles bestens genau das war der Fehler! danke dir!
  2. Hallo an alle, ich habe ein kleines Syntax Problem. Habe mich daran irgendwie festgebissen und bräuchte eure Hilfe. declare @x int= 1 declare @y int= 1 while @y <=16 Begin while @x <= 16 Begin print 'Zaehler'+str(@y)+'_'+str(@x) SET @x = @x + 1 ENd SET @y = @y + 1 END Ziel ist es von Zaehler 1 _1 bis Zaehler 16_16 zu durchlaufen. Jedoch bekomme ich @y nicht erhöht
  3. Morgen an alle, ich möchte aus 2 Parametern ein Date machen declare @Jahr char declare @Monat char set @Jahr = '2014' set @Monat = '12' Mit Convert sollte das möglich sein aber ich habe irgendwie immer wieder einen Fehler drin convert(datetime,cast('24.12.'+@Jahr as char) ,104) as zeit hab es hinbekommen! wenn noch jemand eine andere Lösung weiß würde ich die gern wissen ,convert(datetime,cast('24'+'.'+cast(@Monat as char(2))+'.'+cast(@Jahr as CHAR(4)) as CHAR(10)),104)
  4. tutter

    Subselect counten

    Hallo Jungs ich habe ein Problem und ich hoffe ihr könnt helfen: SELECT --count (*) as System_Zugriffe_Monat_NB * FROM( SELECT SUBSTRING([Ev_Station],1,2) as System_Typ FROM [TEST].[dbo].[EVENTHISTORY] WHERE CAST(substring(CONVERT(varchar(10),[Ev_Time],101),1,2) as numeric) = @paraMonat and cast(substring(CONVERT(varchar(10),[Ev_Time],101),7,4) as numeric) = @paraJahr and Ev_User !='Unbestimmter Benutzer' and Ev_User != 'Guest' --and SUBSTRING([Ev_Station],1,2)='NB' group by [Ev_User],[Ev_Station],SUBSTRING([Ev_Station],1,2) ) AS z der Subselect kann nun entweder die Zeichenkette NB oder PC zurückliefern. Ich würde ja gern beide Unterscheiden mit einer Case Anweisung und dann zählen. Dazu bräuchte ich eine weitere subselect aber ich bekomme das einfach nicht auf die reihe. kann mir jemand zeigen wie das geht mit einer weiteren subselect?
  5. achso! jetzt sind wir beieinander Ziel ist stets die Differenz vom Vormonat zum aktuellen Monat auszurechnen. Dabei sind die Werte aus den jeweiligen Zählern(wie der Name schon sagt *G*) zu verwenden. Das klappt auch alles bestens. Jedoch ist eben das Skript zu lang um den Source in ein DTSX Paket zu packen. wie schon geschrieben gehe ich von einer Begrenzung an Zeichen aus. Somit entsteht für mich die Notwendigkeit diese Abfrage so zu gestalten das sie einfach stur kürzer ist. ;) Ich wird mal meinen Abend opfern und mir Skalarwertfunktion anschauen. Jedoch wäre mir auch an einer Lösung gelegen die meinen jetzigen Stand bzw. Herangehensweise umsetzen könnte. Muss doch machbar sein! die While-Schleife steht doch schon!
  6. ich dachte das sei jetzt klar aber ok dann noch ein paar Details. SELECT [CounterID] ,[Datum] ,cast(substring(CONVERT(varchar(10),[Datum],101),7,4) as numeric) as Jahr ,cast(substring(CONVERT(varchar(10),[Datum],101),4,2) as numeric) as Tag ,cast(substring(CONVERT(varchar(10),[Datum],101),1,2) as numeric) as Monat ,[Zaehler_1K1_1] ,[Zaehler_1K1_1]-(SELECT TOP 1 [Zaehler_1K1_1] FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] AS t2 WHERE (t2.[Zaehler_1K1_1] < t1.[Zaehler_1K1_1]) OR((t2.[Zaehler_1K1_1] = t1.[Zaehler_1K1_1]) AND (t1.[CounterID] > t2.[CounterID])) ORDER BY [Zaehler_1K1_1] DESC, [CounterID]) AS [Zaehler_1K1_1-Differenz] ,[Zaehler_1K1_2] ,[Zaehler_1K1_2]-(SELECT TOP 1 [Zaehler_1K1_2] FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] AS t2 WHERE (t2.[Zaehler_1K1_2] < t1.[Zaehler_1K1_2]) OR((t2.[Zaehler_1K1_2] = t1.[Zaehler_1K1_2]) AND (t1.[CounterID] > t2.[CounterID])) ORDER BY [Zaehler_1K1_2] DESC, [CounterID]) AS [Zaehler_1K1_2-Differenz] ,[Zaehler_1K1_3] ,[Zaehler_1K1_3]-(SELECT TOP 1 [Zaehler_1K1_3] FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] AS t2 WHERE (t2.[Zaehler_1K1_3] < t1.[Zaehler_1K1_3]) OR((t2.[Zaehler_1K1_3] = t1.[Zaehler_1K1_3]) AND (t1.[CounterID] > t2.[CounterID])) ORDER BY [Zaehler_1K1_3] DESC, [CounterID]) AS [Zaehler_1K1_3-Differenz] ,[Zaehler_1K1_4] ,[Zaehler_1K1_4]-(SELECT TOP 1 [Zaehler_1K1_4] FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] AS t2 WHERE (t2.[Zaehler_1K1_4] < t1.[Zaehler_1K1_4]) OR((t2.[Zaehler_1K1_4] = t1.[Zaehler_1K1_4]) AND (t1.[CounterID] > t2.[CounterID])) ORDER BY [Zaehler_1K1_4] DESC, [CounterID]) AS [Zaehler_1K1_4-Differenz] ,[Zaehler_1K1_5] ,[Zaehler_1K1_5]-(SELECT TOP 1 [Zaehler_1K1_5] FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] AS t2 WHERE (t2.[Zaehler_1K1_5] < t1.[Zaehler_1K1_5]) OR((t2.[Zaehler_1K1_5] = t1.[Zaehler_1K1_5]) AND (t1.[CounterID] > t2.[CounterID])) ORDER BY [Zaehler_1K1_5] DESC, [CounterID]) AS [Zaehler_1K1_5-Differenz] ,[Zaehler_1K1_6] ,[Zaehler_1K1_6]-(SELECT TOP 1 [Zaehler_1K1_6] FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] AS t2 WHERE (t2.[Zaehler_1K1_6] < t1.[Zaehler_1K1_6]) OR((t2.[Zaehler_1K1_6] = t1.[Zaehler_1K1_6]) AND (t1.[CounterID] > t2.[CounterID])) ORDER BY [Zaehler_1K1_6] DESC, [CounterID]) AS [Zaehler_1K1_6-Differenz] ,[Zaehler_1K1_7] ,[Zaehler_1K1_7]-(SELECT TOP 1 [Zaehler_1K1_7] FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] AS t2 WHERE (t2.[Zaehler_1K1_7] < t1.[Zaehler_1K1_7]) OR((t2.[Zaehler_1K1_7] = t1.[Zaehler_1K1_7]) AND (t1.[CounterID] > t2.[CounterID])) ORDER BY [Zaehler_1K1_7] DESC, [CounterID]) AS [Zaehler_1K1_7-Differenz] -- hier fehlen noch ein "paar" Anweisungen aber eben stets vom gleichen Aufbau FROM dbo.EnergieMonat AS t1 WHERE (Datum BETWEEN DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0) AND DATEADD(ms, - 3, DATEADD(mm, 0, DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)))) Nun soll / muss das ganze eben via Syntax "verkleinert" werden
  7. dann will ich mal weiter ausholen. wenn ich ein DTSX Paket schreiben will was verdammt viel SQL Syntax enthält bricht das Vorhaben (zb. Import) ab weil das SQL Statement zu lang ist. (meine Vermutung Begrenzung durch nvarchar ca 4000 Zeichen) Somit brauch ich eine Möglichkeit wie eine Abfrage durch eine gewisse Intelligenz mir nun das Ergebnis liefert. Soll heißen durch Schleifen und Co möchte ich wenig SQL Syntax (wegen der Begrenzung) aber eben das gleiche Ziel. :D Die oben aufgeführte Syntax liefert (via print) den gewünschten SQL Aufbau (die eigentliche Syntax wird generiert), diesen Aufbau möchte ich dann nutzen für die eigentliche Abfrage. Ich weiß das es geht aber ich weiß noch nicht wie ich meine Print- Ausgabe nun zu einer SQL Syntax mache :D @ sunny das mit case hatte ich auch schon im Kopf, aber eine while-Schleife und eine sich erhöhende Variable ist denke ich die bessere alternative
  8. Hallo an alle aktuell beschäftige ich mich mit der Vereinfachung von SQL Statements zur besseren Wartung. So habe ich zb. folgendes SQL Statement: declare @i int=1; declare @x int=1; declare @zeile1 nvarchar(30); declare @zeile2 nvarchar(300); --Select while(@x <=11) BEGIN while (@i <=16) BEGIN SET @zeile1 = '[Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+']'; SET @zeile2 = ',[Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+']-(SELECT TOP 1 [Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+'] FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] AS t2 WHERE (t2.[Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+'] < t1.[Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+']) OR((t2.[Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+'] = t1.[Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+']) AND (t1.[CounterID] > t2.[CounterID])) ORDER BY [Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+'] DESC, [CounterID]) AS [Zaehler_1K'+cast(@x as nvarchar(2))+'_'+cast(@i as nvarchar(2))+'-Differenz]'; print @zeile1; print @zeile2; SET @i = @i+1; END SET @i=1; SET @x = @x+1; END GO --from [SKEMS-HST-POWER].dbo.EnergieMonat Ich Möchte die 2 while Schleifen nun mit einen Select from ... umschließen und ausführen lassen. Das Print (als Test) liefert schon mal die Grundlage dafür, aber wie kann ich nun das ganze absetzen? kann mir bitte jemand helfen. Mir fehlt absolut der Ansatz nach was ich suchen kann.
  9. nein du hast das nicht richtig verstanden! der Source ist nicht das Thema! if year(getdate()) != (select max (cast(substring(CONVERT(varchar(10),[Datum],101),7,4) as numeric)) from [SKEMS-HST-POWER].[dbo].[EnergieMonat] as t1_max where CounterID = t1_max.CounterID) and MONTH(GETDATE()) = (select max (cast(substring(CONVERT(varchar(10),[Datum],101),1,2) as numeric)) from [SKEMS-HST-POWER].[dbo].[EnergieMonat] as t1_max where CounterID = t1_max.CounterID) RAISERROR ('Daten liegen in Quelle nicht vor.',16,1); ELSE SELECT [CounterID] ,[Datum] ,cast(substring(CONVERT(varchar(10),[Datum],101),7,4) as numeric) as Jahr ,cast(substring(CONVERT(varchar(10),[Datum],101),4,2) as numeric) as Tag ,cast(substring(CONVERT(varchar(10),[Datum],101),1,2) as numeric) as Monat FROM [SKEMS-HST-POWER].[dbo].[EnergieMonat] as t1 where year(getdate()) =(select max (cast(substring(CONVERT(varchar(10),[Datum],101),7,4) as numeric)) from [SKEMS-HST-POWER].[dbo].[EnergieMonat] as t1_max where t1.CounterID = t1_max.CounterID) and MONTH(GETDATE()) = (select max (cast(substring(CONVERT(varchar(10),[Datum],101),1,2) as numeric)) from [SKEMS-HST-POWER].[dbo].[EnergieMonat] as t1_max where t1.CounterID = t1_max.CounterID) GO Mit Raiserror gebe ich mir nun eine Selbstdefinierte Fehlermeldung aus! Da es eine Fehlermeldung ist kann ich im SSIS einen Mail Task bei Fehler starten. Dieser Schickt mir dann ein Mail. Das war das Ziel ;) Jedoch stellt sich mir die Frage warum bei if sowohl der if teil (wenn dieser zutrifft) und gleich auch der else Teil durchlaufen wird. Ich merke das an der Durchlaufszeit! diese ist bedeutend höher egal ob der if teil oder der else teil zutrifft! versteh ich nicht! oder habe ich im Skript noch ein Fehler?
  10. ja das mit der Bedingung ist natürlich richtig! aber ich denke ich habe das Hauptziel noch nicht klar erläutert. Die If-Bedingung funktioniert und läuft tadellos. Jedoch ist auch genau das das Problem. Wenn die Bedingung erfüllt ist macht er die hinterlegte Anweisung. Ist die Bedingung nicht erfüllt möchte im SSIS den nächsten Schritt machen. (das versenden einer E-Mail) Jedoch brauche ich dazu ein Ereignis und hier finde ich kein passendes da ja meine Bedingung erfüllt ist. Sprich entweder erfüllt oder nicht erfüllt - jedoch kein Abbruch oder irgend ein anderen Fehler den ich im SSIS als Ereignis für den Mail Versand nutzen kann. Hierzu bräuchte ich eben die Lösung!
  11. Hallo an alle, ich hoffe ich umschreibe das gewünschte Ergebnis richtig. Ich möchte einen Ereignishandler provozieren wenn ein SQL Statement durch eine If-Schleife abgefragte Überprüfung kein Ergebnis ausgibt. Soll heißen es wird durch eine If-Schleife geprüft ob ein Zustand wahr ist oder nicht. Wenn nicht hätte ich gern irgendwas was Task Mail senden veranlasst. Dies klappt ja aber nur wenn ich ein Ereignis habe wie OnTaskfailed oder so aber irgendwie ist das für meine Zwecke nicht das richtige. Kann ich hier irgendetwas provozieren oder wie muss ich vorgehen das ich das Ergebnis der Abfrage dazu nutzen kann den Task Mail senden zu starten?
  12. schön das es sowas gibt aber dafür ist mein SQL Server zu alt! ich nutze noch den 2008 und der kann das nicht (laut doku) aber trotzdem danke für den tipp
  13. Hallo an alle ich habe ein Problem welches mir Kopfschmerzen bereitet vielleicht kann von euch ja einer helfen. Tabellenaufbau(Tabelle TEST) ID Wert 1 500 2 545 3 578 Nun möchte ich das ich stets die Differenz ausgegeben bekomme zwischen den kleineren und den nächsten höheren Wert. Ich weiß das ich es mit einer Subselection machen muss, aber ich weiß nicht wie! kann mir jemand helfen?
  14. ähhhmmm Sunny61 zwar danke für deine Mühe aber da steht drin wie ein Wartungsplan anlegt wird. das war aber nicht gefragt. ich will ja vorhandene auslesen mit SQL wie sie heißen und wie lange sie dauern.
  15. Hallo ich würde mir gern alle Ergebnisse der Wartungspläne über SQL Abfrage ausgeben lassen. Ziel ist es das Ergebnis (vorallem die Bezeichnung vom Job und die Dauer) in einem Report auszugeben (meinetwegen Excel) und diese an einem Zentralen Ort abspeichern lassen. Geht das? Kann man mit einer SQL Abfrage die Wartungspläne auslesen? Wenn ja wie ? habe nicht gefunden bis jetzt nur eben das Management Studio zum anschauen.
  16. ach kommt das weiß doch sicher jemand!
  17. Moin moin, ich würde gern einen Job unter einen anderen Account laufen lassen. Also nicht unter den Standartdienst. Es ist eine simple Transaktionsabfrage, für alles andere nutze ich schon einen Proxy-Konto. So was gibt es sicher auch für Transaktionen aber wo finde ich es ?
  18. Hallo an alle, ich habe ein Datenbankmail-Konto erstellt welches auch funktioniert. Jedoch wenn ich innerhalb eines Jobs auf Benachrichtigungen gehe und E-Mail wähle, ist dort kein Profil hinterlegt. Nun könnte ich mir vorstellen das es an den Berechtigungen noch liegt (MSDB). Deswegen habe ich den vermeintlichen Account zum ausführen der Jobs die Rechte für MSDB auf DatabaseMailUserRole gesetzt. Jedoch erscheint noch immer nicht das Profil welches ich hinterlegen will für die Jobs. Wie bekomme ich den Raus unter welchen Account die Mails versendet werden? Gibt es vielleicht noch einen Tipp von euch was es noch sein kann? so ich habe mal noch etwas rumgetestet und dabei festgestellt das ich den gewünschten Status RECEIVES_OCCURRING nie erhalte exec msdb.dbo.sysmail_stop_sp; exec msdb.dbo.sysmail_start_sp; EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail'; bei mir kommt als Ausgabe immer State inactive Ausgabe: mail 0 INACTIVE 2014-11-07 14:27:50.193 2014-11-07 14:27:58.190 kann damit jemand was anfangen? Fehler gefunden! Agent hing! danke trotzdem an alle!
  19. @Cybquest danke für deine Hilfe genau diese Zuordnungstabelle hat es gebracht! hatte mir schon die Finger wund gegoogelt! Für alle die es interessiert wenn man folgenden Ausdruck nutzt kann man den Exportnamen entweder das Datum mit oder ohne Uhrzeit übergeben SUBSTRING( ( (DT_WSTR,30) GETDATE()), 1, 10)
  20. das sieht sehr gut aus!!! nach einer solchen zuordnungstabelle habe ich gesucht! ich werde es morgen gleich mal testen! danke dir!
  21. leider nein! mein SQL Server kann kein cmd Shell aufrufen bzw. darf es nicht! muss auch leider so bleiben. An sich könnte es auch mit dem SSIS Tools gehen. dazu möchte ich in die cmd Anweisung für BCP nur einfach getdate() mitgeben für den Namen der Datei. aber er meckert rum das getdate() naturlich ein date - Typ ist. Das muss aber String sein! kein Thema denke ich mir da und gebe CONVERT(char(10),GETDATE(),101) Jedoch kennt er zwar, im Bereich SSIS, CONVERT als interne Systemvariable, aber mit dem Rest (zb. char) kommt er nicht klar! und nun? wie bekomme ich das automatisiert?! :confused:
  22. hallo an alle, ich habe das Tool BCP.exe von MS für den MS-SQL Server entdeckt. An sich eine feine Sache jedoch finde ich nirgends ein Befehl bei der Ausgabedatei ein Datum in den Namen mit zu integrieren. Jedoch ist genau das benötigt um mit einem Wartungsplan dann die Datei nach X-Tagen wieder weg zu löschen. Kann mir jemand helfen? Wie bekomme ich einen Timestamp mit hinein? zb. """SELECT * from myDB.dbo." + @[User::Table] + """ queryout C:\\users\\MSSQLSERVER\\Downloads\\" + @[User::Table] + ".csv -c -t, -T" oder eben über BCP Hier beschrieben Ziel ist es für mich BCP zu nutzen damit ich das in ein SSIS DTSX laufen lassen kann um Scheduling vom SQL Server zu nutzen. Soweit alles klar ? ;)
  23. gibt es vielleicht auch eine Möglichkeit den letzten Login eines Users auszulesen?
  24. danke sunny61 an das log mitschreiben habe ich gar nicht mehr gedacht. ich schau mal in meine doku ob ich noch herausfinde welcher Aufruf mir dann noch das log und somit den last Login ausliest. Aber solltest du noch was finden wäre ich dir natürlich darüber auch sehr dankbar. ;)
  25. jaein! an sich schon meine Anwendungen können und machen das. ABER! alle anderen Anwendungen auf den Server den es Betrifft machen es nicht! Ich habe aber hier gefühlte 3Mio. Nutzerkonten mit viel zu vielen Rechten! Das muss sich und wird sich ändern :D . Aber ich weis (und leider auch kein anderer hier) für welches Konto was ist bzw. ob dies überhaupt nocht aktiv ist und alles tracen wäre horror zum auswerten! so suche ich eben einen neuen ansatz. Ein paar Konten logge ich schon mit aber es gibt leider auch konten die buchen sich sehr selten ein (ca 1x im Monat) das alles zu loggen ist mühsam. Hast du noch eine Idee? PS: wenn eine Anwendung nicht mehr funktioniert weil Rechte fehlen bekomme ich das hier manchmal garnicht mit bzw. wird hier sehr sehr spät erst festgestellt. Also ist systematisches Abstellen und schauen was passiert auch nur bedingt eine Lösung.
×
×
  • Neu erstellen...