4

私はストアド プロシージャを作成するのが初めてで、既存のストアド プロシージャで以下の sql を見ました。

IF  EXISTS (SELECT * FROM table WHERE object_id = OBJECT_ID(N'stored_proc_name') AND type in (N'P', N'PC'))
DROP PROCEDURE 'stored_proc_name' Go

いくつか調査した結果、存在する可能性のあるユニコード文字に N を使用していることがわかりました。しかし、なぜ「type in (N'P', N'PC')」を使用しているのかわかりません。

誰でもこの構成を説明できますか?

また、ここでの N の使用についての私の考えが正しいかどうかを確認してください。

4

3 に答える 3

7

他の回答に追加するには:

オブジェクト [dbo].[sp_NAME] が存在し、ストアド プロシージャ (P) またはアセンブリ ストアド プロシージャ (PC) であるかどうかを確認しています。

使用例は次のとおりです。

IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[sp_NAME]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[sp_NAME]
GO

ここに、回答付きの同様の質問があります。

アセンブリ ストアド プロシージャに関する情報。

于 2013-08-01T15:17:00.423 に答える
6

はい、Nは文字列がユニコードであることを意味します。

他にあるのはin演算子です。つまりn in (n, ...)、最初のオペランドがフィールドtypeで、括弧内の値が2つのUnicode文字列です。

つまり、と同じ意味and (type = N'P' or type = N'PC')です。

于 2012-07-23T15:31:10.833 に答える
0

The "N" is a Microsoft way of expressing a constant, unicode string (2-bytes/character rather than 1/byte per character). Some built-in functions and stored procedures require it.

The "P" and "PC" specify the types of objects.

于 2012-07-23T15:32:19.903 に答える