Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was führt zu diesem seltsamen SQL-Verhalten?

Ihr Code verhält sich wie erwartet. Die Prozedur ruft sich rekursiv auf .

Wenn Sie nicht Wenn Sie das möchten, versuchen Sie Folgendes:

ALTER PROCEDURE dbo.Test 
    @Value int = null

AS

BEGIN

    IF (IsNull(@Value, '') = '')
        SELECT 'I am NULL!'
    ELSE
        SELECT 'I am ' + CONVERT(varchar(20), @Value)

END

GO

EXEC dbo.Test

Wenn Sie möchten Um die Rekursion zu verwenden, müssen Sie einen Basisfall definieren (auch bekannt als "Beendigungsbedingung"), wodurch die gespeicherte Prozedur den Rekursionsstapel verlässt.