Sql server 2008 如何在存储过程中设置整型参数的默认值?

Sql server 2008 如何在存储过程中设置整型参数的默认值?,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,我有一个存储产品,如下所示。如果我修改 IF(@id!=0)to IF (@id!=null) 当我传递像200这样的id时,如果(@id!=null)将返回false,则将执行插入部分。为什么?我是否应该将@id作为int=null修改为@id作为int=0 ALTER PROCEDURE [dbo].[spname] -- Add the parameters for the stored procedure here @id as int=null, @vendo

我有一个存储产品,如下所示。如果我修改
IF(@id!=0)
to

IF (@id!=null)
当我传递像200这样的id时,
如果(@id!=null)
将返回false,则将执行插入部分。为什么?我是否应该将
@id作为int=null修改为
@id作为int=0

ALTER PROCEDURE [dbo].[spname]
    -- Add the parameters for the stored procedure here
    @id as int=null,
    @vendorName as varchar(150)=null
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;


    IF (@id != 0) -- update
    BEGIN
        ...
    END
    ELSE -- insert
          BEGIN
    ... 
          END
END

在SQL中,不能使用
=
测试
Null
=运算符。您必须改用
为空
为非空

ALTER PROCEDURE [dbo].[spname]
    -- Add the parameters for the stored procedure here
    @id as int = null,
    @vendorName as varchar(150) = null
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;


    IF @id Is Not Null -- update
    BEGIN
        ...
    END
    ELSE -- insert
    BEGIN
    ... 
    END
END

在写入任何SP之前,请使用
将ANSI_NULL设置为OFF

转到数据库属性>>选项,设置
ANSI NULLS Enabled
使其适用于所需的数据库


如果(@ID!=0)
就可以了。

一个
int
总是
0
永远不会
null
,所以在你的情况下它永远不会被击中。使用
Is null
Is Not null
来测试
null
<代码>=
=不起作用。我站直了!理查德是对的。