Недопустимое имя объекта - сохраненная процедура
Я создаю хранимую процедуру в SQL Server через SSMS.
Я написал хранимую процедуру ниже, однако, когда я нажимаю выполнить, ему присваивается ошибка:
Msg 208, уровень 16, состояние 6, процедура NewQuestion, строка 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
Заранее спасибо
Ответы
Ответ 1
Я был поклонником всегда добавляя мои инструкции 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
Это может быть немного хлопот относительно разрешений, поэтому другие используют подход, в котором они создают метод заглушки только для немедленного ALTER
it.
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
Ответ 2
Этот script пытается изменить уже существующую процедуру; он не создает процедуру.
Чтобы создать процедуру, используйте CREATE PROCEDURE
CREATE PROCEDURE [hgomez].[NewQuestion]
Как только процедура существует, вы можете изменить ее определение, используя ALTER PROCEDURE
ALTER PROCEDURE [hgomez].[NewQuestion]
Ответ 3
Это решение fooobar.com/info/524722/... объяснено
Если вы удалите и заново создаете хранимую процедуру, он получит новый объект - список хранимых процедур в SSMS связан с идентификатором, который он знает в момент создания списка. Если вы заново создаете его, но не обновляете папку хранимых процедур, тогда любые попытки его редактирования укажут, что процедура не найдена с изменением идентификатора.