无效的对象名称 - 存储过程

HGo*_*mez 11 sql sql-server ssms stored-procedures

我正在通过SSMS在SQL Server中创建存储过程.

我已经编写了下面的存储过程,但是当我单击执行它时会出现错误:

Msg 208,Level 16,State 6,Procedure NewQuestion,Line 11无效的对象名称'hgomez.NewQuestion'.

表是所有权是正确的.(hgomez.Questions)

USE [devworks_oscar]
GO
/****** Object:  StoredProcedure [hgomez].[NewQuestion]    Script Date: 10/23/2011 23:55:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
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
Run Code Online (Sandbox Code Playgroud)

提前致谢

bil*_*nkc 14

我总是在我的CREATE陈述前面加上明确的存在检查,如果找到它就会掉线.

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
Run Code Online (Sandbox Code Playgroud)

这对于权限来说可能有点麻烦,所以其他人使用一种方法,即只有立即创建存根方法ALTER.

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
Run Code Online (Sandbox Code Playgroud)


Jef*_*ata 5

此脚本尝试修改已存在的过程; 它不会创建过程.

要创建程序使用 CREATE PROCEDURE

CREATE PROCEDURE [hgomez].[NewQuestion]
Run Code Online (Sandbox Code Playgroud)

一旦该过程存在,您可以使用修改其定义 ALTER PROCEDURE

ALTER PROCEDURE [hgomez].[NewQuestion]
Run Code Online (Sandbox Code Playgroud)