我是 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'))
我是 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'))
首先关闭什么关系数据库管理系统?
但是,我怀疑这type是表中的列或存储过程中的变量。
N, 表示您正在将下一个字符串转换为nchar,nvarchar或nvarchar2(取决于 RDBMS)。这些是允许多字节字符的数据类型。
'PC'并且'P'是字符串。
将所有这些放在一起,您将转换'PC'为'P' 多字节字符集,并检查列或变量type是否与这些字符串之一相同。
in表示type可以与或相同 。'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是表。该文档为您提供了完整列表。
如果您希望您的问题对其他人有用,则评论中的详细信息属于问题的主体,因为这些标识符仅在sysobjects表格的上下文中才有意义。
以下是含义。
因此,您的子句检查是否sp_authetication存在任何调用的过程。
'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
...