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

Ongeldige objectnaam - opgeslagen procedure

Ik was een fan van altijd mijn CREATE uitspraken met een expliciete controle op bestaan ​​en laten vallen als deze is gevonden.

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

Dat kan een beetje gedoe zijn met betrekking tot machtigingen, dus anderen gebruiken een aanpak waarbij ze een stub-methode maken om onmiddellijk ALTER het.

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. Bewerking niet toegestaan ​​wanneer innodb_forced_recovery> 0 [SqlYog]

  2. Hoe schrijf je een opgeslagen procedure in phpMyAdmin?

  3. phpMyAdmin kan database niet exporteren

  4. SQL MIN-functie met waar-clausule