Announcement

Collapse
No announcement yet.

Batch Datei mit SQL Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Batch Datei mit SQL Abfrage

    Hi Leute ich bin gerade dabei eine batch Datei zu schreiben und ja ihr habt richtig geraten auch da bin ich ein absoluter Neuling

    Habe ein wenig herumprobiert aber ich komme nicht wirklich weiter folgende Fehlermeldung wird ausgespuckt:

    sqlcmd: 'C:\Dokumente und Einstellungen\Administrator\Desktop\MS SQL 2005\SQLNEWPRODUCT.sql' : Ungültiger Dateiname

    Folgendermaßen sieht mein batch aus:

    sqlcmd -i "C:\Dokumente und Einstellungen\Administrator\Desktop\MS SQL 2005\SQLNEWPRODUCT.sql" -I -S (local) -d CRMECHT
    pause


    Der MSSQL Server sitzt hier lokal auf dem Rechner. Der Rechner heißt WORK01 und die Datenbank CRMECHT. Als Anmeldung ist die Windows Authetifizierung hinterlegt. Verwendet wird Windows 2000 Server.

    Die SQL Abfrage ist eigentlich nichts großartiges, diese sieht folgendermaßen aus:

    use CRMECHT
    go

    INSERT INTO [CRMECHT].[dbo].[NewProduct]
    SELECT
    right(rtrim(artnr),6),
    1,
    GETDATE (),
    1,
    GETDATE (),
    GETDATE (),
    NULL,
    'Y',
    6000,
    artnr,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    text1,
    znr,
    text2,
    text3,
    text4,
    text5
    FROM OPENQUERY(SKTFEPA,'SELECT * FROM crm_artikel')
    where not exists
    ( select * from newproduct)


    Diesen Batch möchte ich alles 5 Minuten über das System laufen lassen, allerdings soll er nicht die Datenbank während eines Zugriffs eines Users zerschiessen. Ist das bereits in der SQL Abfrage möglich?

    hoffe ihr könnt mir weiterhelfen. Ich glaube ich habe die batch Datei grottenfalsch programmiert.

    Vielen Dank für euren Hirnschmalz!
    Grüße
    Zuletzt editiert von omega123; 10.12.2009, 15:05.

  • #2
    edit:
    Hallo Leute,

    was lange wärt wird endlich gut (schreibt man das so?)

    habe den Batch nach langer tüftlerei herausgefunden wie dieser zu schreiben ist, eigentlich ziemlich simpel aber wenn man keine Ahnung hat ist es doch ziemlich mühselig. Hier der Batch:

    sqlcmd -S (local)\SQLEXPRESS -i "C:\CRM SQL\crmnewproducts.sql"

    und der dazugehörige SQL auch noch:

    use CRMECHT
    GO
    INSERT INTO [CRMECHT].[dbo].[NewProduct]
    SELECT
    right(rtrim(artnr),6),
    1,
    GETDATE (),
    1,
    GETDATE (),
    GETDATE (),
    NULL,
    'Y',
    6000,
    artnr,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    text1,
    znr,
    text2,
    text3,
    text4,
    text5
    FROM OPENQUERY(SKTFEPA,'SELECT * FROM crm_artikel')
    where not exists
    ( select * from newproduct)
    GO


    Dennoch bleibt eine Frage:
    Kann ich diesen insert Befehl alle 5 Minuten ausführen ohne, dass die Datenbank durch gleichzeitige zugriffe durcheinander kommt; ich glaube dass es mit dem Befehl hier geht HOLDLOCK TABLOCKX, oder? Das wäre super wenn ich diesen Befehl in den SQL miteinbinden könnte.

    Nochmals vielen Dank im Vorraus!

    Grüße

    Comment


    • #3
      Der SQL-Server ist da schon ganz gut, was die Datensicherheit betrifft. Durch dessen standardmässiges Transaktionshandling mit Autocommit sollte das problemlos funktionieren. Ob natürlich der Befehl selber richtig ist, ob der linked server immer verfügbar ist, ob du nicht Millionen von Datensätzen auf einmal damit einfügen willst oder ob irgendwelche bösen Trigger mitwirken wissen wir hier natürlich nicht. Aber auf den ersten Blick sieht's ganz okay aus

      bye,
      Helmut

      Comment


      • #4
        Hi,

        hab das auch noch nie gemacht, aber das funktioniert offenbar mit Hints:
        http://msdn.microsoft.com/en-us/libr...3(SQL.90).aspx

        Im SQL Server 2005 würd ich den Befehl mittels SQL Server Agent alle 5 Minuten ausführen lassen, den gibts aber bei im Express (den du ja benutzt nicht). Vieleicht einfach ein scheduled tasks in windows selbst regeln.

        Comment


        • #5
          Originally posted by StefanBO View Post
          Hi,

          hab das auch noch nie gemacht, aber das funktioniert offenbar mit Hints:
          http://msdn.microsoft.com/en-us/libr...3(SQL.90).aspx

          Im SQL Server 2005 würd ich den Befehl mittels SQL Server Agent alle 5 Minuten ausführen lassen, den gibts aber bei im Express (den du ja benutzt nicht). Vieleicht einfach ein scheduled tasks in windows selbst regeln.
          hat sich gerade erledigt, da mein chefe gemeint hat, dass wir das nicht machen, aufgrund der performance... daher stell ich den batch einfach auf einmal in der nacht ein...ist nicht die beste lösung aber naja... immer so viel zeit verlieren ist nicht gerade schön.
          Aber er wird schon wissen wovon er spricht


          danke für alles leute!

          gruß und schönen feierabend!

          Comment

          Working...
          X