在SQL存储过程中"AND输入(N'P',N'PC')"的目的和用途是什么?

Nov*_*eMe 2 sql stored-procedures

我是创建存储过程的新手,我在下面的现有存储过程中看到了这个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
Run Code Online (Sandbox Code Playgroud)

经过一些调查后,我发现我们正在使用N来表示可能出现的任何unicode字符.但是,我不确定为什么我们使用"输入(N'P',N'PC')"?

任何人都可以解释这个结构吗?

还要确认一下我在考虑使用N的方法是否正确?

Guf*_*ffa 5

是的,N表示字符串是unicode.

你还有什么是in运算符,即n in (n, ...)第一个操作数是字段的位置type,括号中的值是两个unicode字符串.

所以,它的含义相同and (type = N'P' or type = N'PC').


Jam*_*ard 5

要添加到其他答案:

您正在检查对象[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
Run Code Online (Sandbox Code Playgroud)

下面是一个类似的问题的答案.

有关程序集存储过程的信息.