如果object_id不为null,则无法删除过程

时间:2012-11-03 10:15:03

标签: sql tsql

我有一个奇怪的问题。我正试图删除一个程序,只有它存在,并有这个代码:

IF OBJECT_ID(N'dbo.CreateBlogUser', N'U') IS NOT NULL
    DROP PROCEDURE CreateBlogUser;
    PRINT 'IS NOT NULL'
GO

(只有在真实与否时才打印)。 当我运行它时,会打印“IS NOT NULL”,但程序不会被删除!它仍然存在于数据库中,因此当我运行我的Create过程时,它会失败。

然而!当我试图从代码中删除NOT时,它可以工作!该过程被删除,仍然打印“IS NOT NULL”。这似乎完全倒退,我不知道为什么会这样做。是否与OBJECT_ID中的额外N:s和U:s有关?找到代码here

2 个答案:

答案 0 :(得分:2)

替换'P'上的'U'

IF OBJECT_ID(N'dbo.CreateBlogUser', N'P') IS NOT NULL
  DROP PROCEDURE CreateBlogUser;
PRINT 'IS NOT NULL'
GO

答案 1 :(得分:1)

在SQL中,您可以尝试: -

IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'CreateBlogUser')
    exec('CREATE PROCEDURE [dbo].[CreateBlogUser] AS BEGIN SET NOCOUNT ON; END')
    PRINT 'IS NOT NULL'
 GO

在TSQL中,您可以尝试: -

 IF OBJECT_ID (N'dbo.CreateBlogUser', N'P') IS NOT NULL
  DROP TABLE dbo.CreateBlogUser;
  PRINT 'IS NOT NULL'
 GO

请参阅documentation