我有一个奇怪的问题。我正试图删除一个程序,只有它存在,并有这个代码:
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
答案 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