2015-02-09 32 views
0

我有一個關於使用SQL Server存儲過程的問題,2005年「和」「或者使用SQL Server存儲過程」條件

這是我的存儲過程:

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

您是否有正確的數據返回'和'語句? – Sefa 2015-02-09 12:42:15

+0

有沒有聽說過真值表? http://en.wikipedia.org/wiki/Truth_table – IROEGBU 2015-02-09 12:42:19

+1

因爲沒有行同時擁有'user_id'和'user_pwd'。因此,存儲過程不返回任何內容。 – 2015-02-09 12:43:00

回答

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條款的定義方式。

+1

* NVARCHAR參數的*默認長度*爲*** 1個字符***!通常不是人們期望和想要的...... – 2015-02-09 12:56:05

+0

感謝您給予選擇解決方案 – 2015-02-09 12:57:59