3

我有一个奇怪的问题。我试图仅在程序存在时才删除它,并拥有以下代码:

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 有关?在这里找到代码

4

2 回答 2

4

在“P”上替换“U”

IF OBJECT_ID(N'dbo.CreateBlogUser', N'P') IS NOT NULL
  DROP PROCEDURE CreateBlogUser;
PRINT 'IS NOT NULL'
GO
于 2012-11-03T10:19:45.773 回答
2

在 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

请参阅此文档

于 2012-11-03T10:20:20.343 回答