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を削除しようとすると、機能します。プロシージャは削除され、「ISNOTNULL」が引き続き出力されます。これは完全に逆に思えますが、なぜそうなるのかわかりません。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 に答える