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

';和'';或';SQL Server中使用存储过程的条件,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个关于在SQLServer2005中使用存储过程的问题 这是我的存储过程: 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

我有一个关于在SQLServer2005中使用存储过程的问题

这是我的存储过程:

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
我的预期输出是获取“state”的值。它返回了一个空记录

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

我的sql查询:

exec tst_user_sp 'lackh', 's'

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

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
子句是如何定义的。

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

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
子句是如何定义的。

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

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
子句是如何定义的。

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

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
子句的定义方式。

您是否有正确的数据要为“and”语句返回?听说过真值表吗?因为没有一行同时具有所需的
user\u id
user\u pwd
。因此,存储过程不返回任何内容。是的,我有,但条件是两者都应得到满足。这与当前的问题无关,但实际上您可以执行此类查询这一事实强烈表明密码可能以明文形式存储,这总是一个坏主意。你有正确的数据返回“和”语句吗?听说过真值表吗?因为没有一行同时具有所需的
user\u id
user\u pwd
。因此,存储过程不返回任何内容。是的,我有,但条件是两者都应得到满足。这与当前的问题无关,但实际上您可以执行此类查询这一事实强烈表明密码可能以明文形式存储,这总是一个坏主意。你有正确的数据返回“和”语句吗?听说过真值表吗?因为没有一行同时具有所需的
user\u id
user\u pwd
。因此,存储过程不返回任何内容。是的,我有,但条件是两者都应得到满足。这与当前的问题无关,但实际上您可以执行此类查询这一事实强烈表明密码可能以明文形式存储,这总是一个坏主意。你有正确的数据返回“和”语句吗?听说过真值表吗?因为没有一行同时具有所需的
user\u id
user\u pwd
。因此,存储过程不返回任何内容。是的,我有,但条件是两者都应得到满足。这与当前的问题无关,但实际上您可以执行此类查询这一事实强烈表明密码可能以明文形式存储,这总是一个坏主意。
NVARCHAR
参数的默认长度是1个字符!通常不是人们期望和想要的…并且
NVARCHAR
参数的默认长度是1个字符!通常不是人们期望和想要的…并且
NVARCHAR
参数的默认长度是1个字符!通常不是人们期望和想要的…并且
NVARCHAR
参数的默认长度是1个字符!通常不是一个人期望和想要的。。。