2017-03-08 89 views
-3

這是我的存儲過程基於多個輸入返回值。但它不起作用。存儲過程返回基於多個輸入的值

USE [E_clinic] 
GO 
ALTER PROCEDURE [dbo].[Diseasesp1] 

    @id1 nchar(10), 
    @id2 nchar(10), 
    @id3 nchar(10) 

AS 

BEGIN 
SET NOCOUNT ON; 


    set @[email protected]+1 
    set @[email protected]+1 
    set @[email protected]+1 

    SELECT [Dname] 
    From [dbo].[Disease] AS D 
    Left Join [dbo].[Symptom] AS S ON D.[DiseaseID] = S.[DiseaseID] 
    Where [SymptomID] = @id1 AND [SymptomID] = @id2 AND [SymptomID] = @id3 
END 
+2

定義「它不工作」 – DavidG

+1

您正在將整數值添加到nchar變量。 –

+2

你也限制'SymptomID'等於3種不同的東西,所以你永遠不會得到任何結果。 – DavidG

回答

-1

您需要更改存儲過程中的以下內容。 1. @ id1,@ id2和@ id3數據類型是nc​​har(10),但是您嘗試使用整數(@ id1 = @ id1 + 1)執行加法操作。這是不可能的,所以請更改@id的數據類型。 2.在那個select語句中,where子句中使用了與AND邏輯運算符相同的列。這不是用連接查詢編寫SQL select的正確方法。請使用正確的地方使用別名條款,並使用正確的邏輯運算符,然後嘗試..

1

考慮更改像

ALTER PROCEDURE [dbo].[Diseasesp1] 

    @id1 int, 
    @id2 int, 
    @id3 int 

AS 

BEGIN 
SET NOCOUNT ON; 


    set @[email protected]+1 
    set @[email protected]+1 
    set @[email protected]+1 

    SELECT [Dname] 
    From [dbo].[Disease] AS D 
    Left Join [dbo].[Symptom] AS S ON D.[DiseaseID] = S.[DiseaseID] 
    AND s.[SymptomID] = @id1 
    Left Join [dbo].[Symptom] AS S1 ON D.[DiseaseID] = S1.[DiseaseID] 
    AND s1.[SymptomID] = @id2 
    Left Join [dbo].[Symptom] AS S2 ON D.[DiseaseID] = S2.[DiseaseID] 
    AND s2.[SymptomID] = @id3; 
END 
0

你的程序,您可以簡單地使用在此。

Where [SymptomID] in (@id1, @id2, @id3) 

但是我會非常關心的是,你接收參數作爲字符數據,然後與他們做數學。這只是一個關於數據類型的不好的方法。當你收到'a'會發生什麼?