sql >> Databáze >  >> Database Tools >> SSMS

Neplatný název objektu - uložená procedura

Byl jsem příznivcem toho, že jsem vždy předřadil svůj CREATE příkazy s explicitní kontrolou existence a zrušením, pokud byl nalezen.

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

To může být trochu problematické, pokud jde o oprávnění, takže ostatní používají přístup, kdy vytvoří metodu útržku pouze k okamžitému ALTER to.

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 - count():Parametr musí být pole nebo objekt, který implementuje Countable

  2. Jak nastavit plné texty jako výchozí pro phpMyAdmin?

  3. Jak vypsat DISTINCT ALL produkty z databáze

  4. Výsledky SSMS jako odkaz, na který lze kliknout