存储过程以及P,U,PC中的类型

时间:2012-05-27 12:42:45

标签: sql sql-server where

我是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'))

3 个答案:

答案 0 :(得分:6)

如果您希望您的问题对其他人有用,则评论中的详细信息属于问题正文,因为这些标识符仅在sysobjects表的上下文中有意义。

这是意思。

  • U - 用户表
  • P - 传统存储过程(SQL)
  • PC - CLR存储过程(通常是C#或VB.NET)

因此,您的子句会检查是否存在任何名为sp_authetication的过程。

答案 1 :(得分:5)

首先关闭什么是关系数据库管理系统?

但是,我怀疑type是表中的列或存储过程中的变量。

N,表示您要将下一个字符串转换为ncharnvarcharnvarchar2(取决于RDBMS)。这些是允许多字节字符的数据类型。

'PC''P'是字符串。

将所有内容放在一起,您将'PC''P'转换为多字节字符集,并检查列或变量type是否与其中一个字符串相同。

in表示type可以与 <{em> 'PC' 'P'相同。


根据您的评论,您正在使用SQL-Server

您正在检查对象[dbo].[SP_AUTHENTIFICATION]是否存在,并且是存储过程(P)还是程序集存储过程(PC)。

type中的sys.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是否为表格。 The documentation为您提供完整列表。

答案 2 :(得分:0)

'line'正在寻找名为SP_AUTHENTIFICATION的存储过程,如果存在则可能会丢弃它。这在SQL Server中很常见,因为SQL Server没有CreateOrAlter。

我找到了一种更好的方法来执行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

...