sql >> Databasteknik >  >> Database Tools >> SSMS

Ogiltigt objektnamn - lagrad procedur

Jag var ett fan av att alltid lägga fram min CREATE uttalanden med en explicit kontroll av existens och släpps om den hittades.

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'NewQuestion' AND ROUTINE_SCHEMA = 'hgomez')
BEGIN
    DROP PROCEDURE hgomez.NewQuestion
END
GO

-- this is always a CREATE
CREATE PROCEDURE [hgomez].[NewQuestion]
    (
    @QUESTIONNAME nvarchar(50),
    @QUESTION_ID int OUTPUT
    )

AS
    /* SET NOCOUNT ON */
    INSERT INTO [Questions] (QuestionText) VALUES (@QUESTIONNAME)
    SET @QUESTION_ID = SCOPE_IDENTITY();
    RETURN

Det kan vara lite krångel när det gäller behörigheter så andra använder ett tillvägagångssätt där de skapar en stubbmetod bara för att omedelbart ALTER det.

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'NewQuestion' AND ROUTINE_SCHEMA = 'hgomez')
BEGIN
    EXEC ('CREATE PROCEDURE hgomez.NewQuestion AS SELECT ''stub version, to be replaced''')
END
GO

-- This is always ALTER
ALTER PROCEDURE [hgomez].[NewQuestion]
    (
    @QUESTIONNAME nvarchar(50),
    @QUESTION_ID int OUTPUT
    )

AS
    /* SET NOCOUNT ON */
    INSERT INTO [Questions] (QuestionText) VALUES (@QUESTIONNAME)
    SET @QUESTION_ID = SCOPE_IDENTITY();
    RETURN


  1. PHPMyadmin xampp-fel

  2. Frågan fungerar i phpmyadmin men inte i PHP-skript

  3. PHP MySQL INSERT infogar inte eller något fel visas

  4. Skapa tabellfel i mysql när du använder CURDATE() som standard