4 Stimmen

Prüfen, ob Stored Procedures Syntaxfehler haben

Ich habe viele gespeicherte Prozeduren in meiner Datenbank. Wir ändern ständig die Datenstruktur (wir sind in der Entwicklung) Gibt es ein Tool, das mir sagt, welche gespeicherten Prozeduren nicht kompiliert werden können?

Wenn Sie eine gespeicherte Prozedur erstellen, werden Sie daran gehindert, wenn eine ungültige Tabelle oder Spalte vorhanden ist, aber wenn Sie den Spaltennamen ändern, nachdem die gespeicherte Prozedur erstellt wurde, ist Ihre Proc ungültig. Ich würde gerne eine Liste dieser ungültigen Prozeduren erhalten.

Prost!

Joseph

3voto

MartW Punkte 12138

Sie können dieses Tool von CodeProject verwenden, das integrierte SQL-Funktionen und Optionen verwendet, um eine Textdatei mit ungültigen gespeicherten Prozeduren zu erstellen.

http://www.codeproject.com/KB/database/validatingsql.aspx

2voto

James Black Punkte 41034

Ihre beste Wette ist, einige Datenbank-Unit-Tests zu schreiben, wenn Sie VS2008 verwenden, dann ist es ziemlich einfach zu tun, aber zeitaufwendig.

Aber dann können Sie Ihre Tests durchführen und sicherstellen, dass entweder alles so funktioniert, wie Sie es erwarten, oder Sie erhalten eine Liste von Funktionen, die Sie sich ansehen müssen.

Vielleicht finden Sie diesen Artikel über Datenbank-Unit-Tests interessant, aber ich glaube, es kann VS Team System erfordern..:

http://www.developer.com/db/article.php/3758601/Introducing-Visual-Studio-Team-System-2008-Database-Unit-Testing.htm

1voto

Eine wesentliche Verbesserung der Überwachung ist eine kontinuierliche Integration (CI), die in regelmäßigen Abständen (z. B. alle zwei Stunden oder täglich) die Objekte in der Datenbank überprüft. Eine andere Möglichkeit ist die Erstellung eines Windows-Dienstes, der einen Endpunkt aufruft.

Der CI- oder Windows-Dienst kann Benachrichtigungen an das Entwicklungsteam senden, wenn ein Build beschädigt wurde.

Im Endpunkt dieses Backends können Sie eine Prozedur wie diese einrichten, die Sie über die fehlerhaften Ansichten, gespeicherten Prozeduren und Funktionen in Ihrer Datenbank informiert.

CREATE PROCEDURE Get_Objects_With_Errors 
AS

    SET NOCOUNT ON;
    DECLARE @objectName AS VARCHAR(255);

    DECLARE @count int = 0;

    -- Find all views in dbo schema
    DECLARE listViews CURSOR FOR
        SELECT [TABLE_NAME]
        FROM INFORMATION_SCHEMA.VIEWS v
        WHERE [TABLE_SCHEMA] = 'dbo';

    OPEN listViews
    FETCH NEXT FROM listViews into @objectName;

    WHILE (@@FETCH_STATUS <> -1)
    BEGIN
        BEGIN TRY
            EXEC sp_refreshview @objectName;
        END TRY
        BEGIN CATCH
            PRINT @objectName + ' has ERRORS : ' + ERROR_MESSAGE();
            SET @count = @count + 1;
        END CATCH
        FETCH NEXT FROM listViews INTO @objectName;
    END

    CLOSE listViews;
    DEALLOCATE listViews;

    -- Find all procedures and functions in dbo schema
    DECLARE listRoutines CURSOR FOR
        SELECT SPECIFIC_NAME
        FROM INFORMATION_SCHEMA.ROUTINES
        WHERE SPECIFIC_SCHEMA = 'dbo' 
        GROUP BY SPECIFIC_NAME;

    OPEN listRoutines
    FETCH NEXT FROM listRoutines into @objectName;

    WHILE (@@FETCH_STATUS <> -1)
    BEGIN
        BEGIN TRY
            EXEC sp_refreshsqlmodule @objectName;
        END TRY
        BEGIN CATCH
            PRINT @objectName + ' has ERRORS : ' + ERROR_MESSAGE();
            SET @count = @count + 1;
        END CATCH
        FETCH NEXT FROM listRoutines INTO @objectName;
    END

    CLOSE listRoutines;
    DEALLOCATE listRoutines;

    PRINT 'Total with errors : ' + CAST(@count AS nvarchar(10));

SET NOCOUNT OFF;

-1voto

sai Punkte 1
Create procedure data_tranfer
(@C1 int)
AS
BEGIN
INSERT INTO coindesk
(UPDATED,
UPDATEDISO,
UPDATEDUK,
USDCODE,
USDSYMBOL,
USDRATE,
USDDESCRIPTION,
USDRATE_FLOAT,
GBPCODE,              
GBPSYMBOL,
GBPRATE,           
GBPDESCRIPTION,     
GBPRATE_FLOAT,         
EURCODE,           
EURSYMBOL,            
EURRATE,           
EURDESCRIPTION,      
EURRATE_FLOAT)
SELECT UPDATED,
UPDATEDISO,
UPDATEDUK,
USDCODE,
USDSYMBOL,
USDRATE,
USDDESCRIPTION,
USDRATE_FLOAT,
GBPCODE,              
GBPSYMBOL,
GBPRATE,           
GBPDESCRIPTION,     
GBPRATE_FLOAT,         
EURCODE,           
EURSYMBOL,            
EURRATE,           
EURDESCRIPTION,      
EURRATE_FLOAT
FROM stagcoindesk
WHERE C1 = @C1
END;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X