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

Ugyldigt objektnavn - lagret procedure

Jeg var fan af altid at forberede min CREATE udsagn med en eksplicit kontrol for eksistens og droppe, hvis den blev fundet.

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 være lidt bøvlet med hensyn til tilladelser, så andre bruger en tilgang, hvori de kun opretter en stubmetode for straks at 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. Kan ikke logge ind på phpMyAdmin, ingen fejl vises

  2. Sådan skjuler du informationsskemadatabase fra phpmyadmin

  3. Sådan tilføjes et andet felt i en eksisterende tabel i mysql

  4. DATETIME og TIMESTAMP Længde/Værdier fejl