none
fehlender Parameter einer SP wird beoim Erzeugen einer anderen SP nicht als Fehler erkannt RRS feed

  • Frage

  • Hallo,

    ich habe eine Sp, die 2 Parameter hat.

    Ich habe eine weitere SP, die erste SP aufruft mit allerdings nur einem Parameter (also fehlt ein Parameter).

    Beim Übersetzen der zweiten SP kommt aber kein Fehler, dieser kommt erst zur Laufzeit.

    Das ist ein Verhalten, was mir bisher noch nicht begegnet ist.

    Vielen Dank für Eure Hilfe.

    Gregor

    Freitag, 14. Februar 2020 13:28

Alle Antworten

  • Hallo Gregor,

    poste doch bitte beide CREATE Statements.


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

    Freitag, 14. Februar 2020 13:31
    Moderator
  • Hallo Stefan,

    create procedure gregors (@val1 varchar(1), @val2 varchar(2))
    as 
    begin
    print 'hallo'
    end
    go

    create procedure gregor2 as
    begin
    exec gregors '1'

    end

    Die Erzeugung der zweiten SP geht ohne Probleme, obwohl ja 2 Parameter Pflicht sind.

    Danke.

    Gregor

    Freitag, 14. Februar 2020 13:43
  • Das ist normales Verhalten, da man Prozeduren mit dem selben Namen und unterschiedlichen Parametern definieren kann, sog. "Overloading".
    Daher wird der Fehler erst zur Laufzeit festgestellt.

    Freitag, 14. Februar 2020 13:53
  • oh, d.h. ich habe zur Entwurfszeit keine Möglichkeit herauszufinden, ob eine SP korrekt ist?

    Im Schema ist ja nur eine Definition vorhanden...

    Freitag, 14. Februar 2020 13:58
  • da man Prozeduren mit dem selben Namen und unterschiedlichen Parametern definieren kann, sog. "Overloading".

    Kann man nicht. Wie kommst Du darauf?

    Optionale Parameter sind was komplett anderes als Überladung.


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


    Freitag, 14. Februar 2020 13:59
    Moderator
  • Hi,

    oh, d.h. ich habe zur Entwurfszeit keine Möglichkeit herauszufinden, ob eine SP korrekt ist?

    Jein. Das SSMS zeigt bei aktiviertem Intellisense zwar an, dass die Prozedur gregors zwei Parameter erwartet. Die SP kann man aber leider dennoch erzeugen.


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

    Freitag, 14. Februar 2020 14:04
    Moderator
  • das mit Intellisens hatte ich ja gesehen, daher habe ich mich ja gewundert, dass man es trotzdem erzeugen kann.

    Da wir hunderte von Sp´s haben, muss ich vor einer Auslieferung ja sicherstellen, dass alles korrekt ist, die kann ich mir nicht von Hand anschauen,,,

    Momentan habe ich diese Chance anscheinend nicht?

    Freitag, 14. Februar 2020 14:09
  • Du kannst ja auch nachträglich eine aufgerufene Prozedur löschen oder ändern und merkst einen Fehler erst zur Laufzeit.

    Daher ist hier gutes (automatisiertes) Testen angesagt.


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    Freitag, 14. Februar 2020 14:30
    Beantworter
  • Dann sollte man eben ausgiebig testen, um solche Fehler zu finden;-).
    Freitag, 14. Februar 2020 14:44
  • Das ist ein Verhalten, was mir bisher noch nicht begegnet ist.

    Hallo Gregor,

    das ist das ganz normale Verhalten, ist dokumentiert und liegt am "Deferred Name Resolution", der verzögerten Namensauflösung.
    Man darf Stored Procedures erstellen, die auf Objekte zugreifen, die zum Zeitpunkt der Erstellung der SP nicht existiert. Es wird nur die korrekte SQL Syntax geprüft, nicht die Existens von Tabellen oder ob alle Parameter für eine SP angegeben wurden.

    Ich verwende für Datenbank Entwicklung grundsätzlich SSDT Datenbank Projekte, da wird das geprüft.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]



    Freitag, 14. Februar 2020 16:32