none
Abfragen in DB speichern und nicht Als .sql Textdatei RRS feed

  • Frage

  • Soll ich mich gleich im vorfeld entschuldigen :) - ich finde es leider nicht

    ich habe immer für mich ein paar Abfragen die ich gerne zu der Datenbank speichern möchte aber ich weiss nicht wo

    zb.

    wer ist angemeldet

    Indexe neu setzen

    oder einach ein backup der DB erstellen

    zzt. Speichere ich mir diese in eine textdatei

    sprich zB

    BackupMasterErstellen.sql

    inhalt  BACKUP DATABASE CSRdat_Master TO DISK = 'C:\CSR\CSRdat_Master.bak' WITH INIT

    kann ich dieses nicht in der Datenbank hinterlegen - würde das handling für mich einfacher machen

    Danke

    Freitag, 14. Februar 2020 09:44

Antworten

  • Hallo Michaek,

    Stored Procedures sind schon das geeignete Mittel, ebenso Views für häufige Abfragen.

    Eins SP kann so aussehen:

    -- SP anlegen
    CREATE PROCEDURE dbo.pBackup_CSRdat_Master
    AS
    BEGIN
        BACKUP DATABASE CSRdat_Master TO DISK = 'C:\CSR\CSRdat_Master.bak' WITH INIT;
    END;
    GO
    
    -- Ausführen
    EXEC dbo.pBackup_CSRdat_Master;
    GO


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert MCDPone Freitag, 14. Februar 2020 10:37
    Freitag, 14. Februar 2020 10:23

Alle Antworten

  • Hi,

    Du willst die SQL Statements in einer Datenbank bzw. einer Tabelle darin speichern?

    Falls ja, wo liegt dabei das Problem?

    Erstell dir eine Tabelle:

    CREATE TABLE [dbo].[SqlStatements]
    (
        [ID] [int] IDENTITY(1,1) NOT NULL,
        [Key] [nvarchar](255) COLLATE Latin1_General_CI_AS NOT NULL,
        [Value] [nvarchar](max) COLLATE Latin1_General_CI_AS NULL,
        CONSTRAINT [PK_SqlStatements] PRIMARY KEY CLUSTERED 
        (
            [ID] ASC
        )
    )

    Und leg die Werte dort in der Value Spalte ab. Wichtig für dich ist dabei, dass Du vor dem Speichern die Strings so anpasst, dass Du die auch speichern kannst. ' musst Du durch '' ersetzen, den String an sich natürlich auch nochmal in '...' einfassen, ...

    INSERT INTO SqlStatements
    (
        [Key], Value
    )
    VALUES
    (
        'DeinSchlüssel',
        'BACKUP DATABASE CSRdat_Master TO DISK = ''C:\CSR\CSRdat_Master.bak'' WITH INIT'
    )

    Auslesen ganz normal (ohne Konvertierung) dann mit:

    SELECT *
    FROM   SqlStatements
    WHERE  [Key] = 'DeinSchlüssel'

    HTH


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Freitag, 14. Februar 2020 10:10
    Moderator
  • Die Problematik dabei ist lediglich:

    Enthält der SQL Hochkommas, so sind diese korrekt zu verdoppeln.
    Sonst scheitert der Insert dauernd mit Syntaxfehler.

    Einfacher ist es, wenn du Access hast.
    Dann kannst du für obige Tabelle ein einfaches Formular (Schlüssel- und Memofeld) bauen und deine SQL's dort per Copy/Paste einfach eintragen und wieder abrufen.

    Freitag, 14. Februar 2020 10:15
  • Hallo Stefan

    an eine Tabelle hatte ich auch schon gedacht

    aber ich dachte eher in einem anderen bereich wo ich diese einfach aufrufen könnte und direkt ausführen kann

    im Bereich Funktionen oder Proceduren

    weiss aber ehrlich gesagt nicht wie ich soetwas dort speichern kann und ob die da überhaupt richtig aufgehoben sind

    LDN

    Michael


    • Bearbeitet MCDPone Freitag, 14. Februar 2020 10:20
    Freitag, 14. Februar 2020 10:19
  • Das geht dann per "Create Procedure":

    https://docs.microsoft.com/de-de/sql/t-sql/statements/create-procedure-transact-sql?view=sql-server-ver15

    was allerdings komplexer ist.

    Per "Execute MeineProzedur" kannst du diese dann ausführen:
    https://docs.microsoft.com/de-de/sql/t-sql/language-elements/execute-transact-sql?view=sql-server-ver15

    Freitag, 14. Februar 2020 10:22
  • Hallo Michaek,

    Stored Procedures sind schon das geeignete Mittel, ebenso Views für häufige Abfragen.

    Eins SP kann so aussehen:

    -- SP anlegen
    CREATE PROCEDURE dbo.pBackup_CSRdat_Master
    AS
    BEGIN
        BACKUP DATABASE CSRdat_Master TO DISK = 'C:\CSR\CSRdat_Master.bak' WITH INIT;
    END;
    GO
    
    -- Ausführen
    EXEC dbo.pBackup_CSRdat_Master;
    GO


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert MCDPone Freitag, 14. Februar 2020 10:37
    Freitag, 14. Februar 2020 10:23