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

Joh*_*com 1 sql sql-server where

我是SQL的初学者.我找不到这行:

type in (N'P', N'PC')
Run Code Online (Sandbox Code Playgroud)

什么在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'))
Run Code Online (Sandbox Code Playgroud)

Jir*_*ika 6

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

这是意思.

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

因此,您的子句检查是否sp_authetication存在任何调用过程.


Ben*_*Ben 5

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

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

N,意味着你的下一个字符串转换为一个nchar,nvarcharnvarchar2(视RDBMS).这些是允许多字节字符的数据类型.

'PC'并且'P'是字符串.

把所有这些组合起来,你要转换'PC',并'P' 以多字节字符集,并检查该列或变量是否type相同,这些字符串之一.

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是一个表.该文档为您提供了完整列表.