我有一个关于在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'
答案 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
子句的定义方式,任何使用默认值都将导致不返回任何值。