4

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

经过一番调查,我发现我们使用 N 表示可能存在的任何 unicode 字符。但是,我不确定为什么我们使用“输入(N'P',N'PC')”?

谁能解释一下这个构造?

还要确认我在这里使用 N 的想法是否正确?

4

3 回答 3

7

要添加到其他答案:

您正在检查对象 [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

这是一个类似的问题和答案。

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

于 2013-08-01T15:17:00.423 回答
6

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

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

因此,它与 具有相同的含义and (type = N'P' or type = N'PC')

于 2012-07-23T15:31:10.833 回答
0

“N”是 Microsoft 表示常量 unicode 字符串(2 字节/字符而不是 1/字节/字符)的 Microsoft 方式。一些内置函数和存储过程需要它。

“P”和“PC”指定对象的类型。

于 2012-07-23T15:32:19.903 回答