1

私はSQLの初心者です。この行が見つかりません:

type in (N'P', N'PC')

where句には何がありますか:P、PC、U?

編集:

完全なクエリは次のとおりです。

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

3 に答える 3

6

まず、どのリレーショナルデータベース管理システムですか?

typeただし、それはテーブルの列またはストアドプロシージャの変数であると思われます。

Nnchar、は、次の文字列を、、nvarcharまたはnvarchar2(RDBMSに応じて)に変換していることを意味します。これらは、マルチバイト文字を許可するデータ型です。

'PC''P'は文字列です。

これをすべてまとめる'PC''P' 、マルチバイト文字セットに変換し、列または変数typeがこれらの文字列の1つと同じであるかどうかを確認します。

inまたはのいずれかtype同じにすることができることを意味します。 'PC' 'P'


コメントから、SQL-Serverを使用しています

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

の列はそうtypesys.objectsはないncharので、変換はかなり無意味です。

ポイントごとに行く

  • IF EXISTS-括弧内の次のクエリの結果が行を返す場合:
  • SELECT * FROM sys.objects-から行を選択しますsys.objects
  • WHERE object_id =-ここで、object_idは次のようになります
  • OBJECT_ID(N'[dbo].[SP_AUTHENTIFICATION]')object_id-のを返す[dbo].[SP_AUTHENTIFICATION]
  • AND type in (N'P', N'PC')-そして、そのオブジェクトはストアドプロシージャです。

U、クエリに含まれていないものは、がテーブルであるかどうかを確認してtypeいます。ドキュメントには完全なリストがあります。

于 2012-05-27T12:46:11.877 に答える
6

質問を他の人に役立つようにしたい場合、コメントの詳細は質問の本文に属します。これらの識別子は、sysobjectsテーブルのコンテキストでのみ意味があるためです。

これが意味です。

  • U-ユーザーテーブル
  • P-従来のストアドプロシージャ(SQL)
  • PC-CLRストアドプロシージャ(通常はC#またはVB.NET)

したがって、句は、呼び出されたプロシージャがsp_authetication存在するかどうかをチェックします。

于 2012-05-27T13:01:26.787 に答える
0

'line'は、SP_AUTHENTIFICATIONという名前のストアドプロシージャを探しており、存在する場合は削除する可能性があります。SQL ServerにはCreateOrAlterがないため、これはSQLServerでは非常に一般的です。

ストアドプロシージャの履歴が維持されるように、CreateOrAlterを実行するためのより良い方法を見つけました。

if not exists(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[myproc]') AND type in (N'P', N'PC'))
  exec('create proc dbo.myproc as select 0')

alter proc dbo.myproc

as

...
于 2012-05-27T12:56:01.537 に答える