'和#39; '或#39;条件使用SQL Server中的存储过程

时间:2015-02-09 12:40:06

标签: sql sql-server stored-procedures

我有一个关于在SQL Server 2005中使用存储过程的问题。

这是我的存储过程:

ALTER PROCEDURE [dbo].[tst_user_sp]  
    -- Add the parameters for the stored procedure here 
    @p1 nvarchar = null,    
    @p2 nvarchar = null AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here 
    SELECT state 
    FROM tst_user 
    WHERE user_id = @p1 AND user_pwd = @p2; 
END

我的预期输出是获得'状态'的值。它返回了一个空记录。

但是,在将And更改为Or后,我得到了输出。为什么我不能使用And

获得输出

我的SQL查询:

exec tst_user_sp 'lackh', 's'

1 个答案:

答案 0 :(得分:3)

我不知道这是否与您看到的问题有关,但您的存储过程存在严重问题。定义是:

ALTER PROCEDURE [dbo].[tst_user_sp]  
-- Add the parameters for the stored procedure here 
@p1 nvarchar = null,    
@p2 nvarchar = null AS

这使用nvarchar字段的默认长度,默认值因上下文而异。在SQL中使用字符串类型时,总是使用长度。类似的东西:

ALTER PROCEDURE [dbo].[tst_user_sp] (
-- Add the parameters for the stored procedure here 
    @p1 nvarchar(4000) = null,    
    @p2 nvarchar(4000) = null
) AS

鉴于您在过程中所做的事情,由于where子句的定义方式,任何使用默认值都将导致不返回任何值。