2017-03-08 1 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のデータ型はnchar(10)ですが、整数(@ id1 = @ id1 + 1)で加算演算を実行しようとしています。これは不可能なので、@ idのデータ型を変更してください。 2.そのselect文では、where句はAND論理演算子で同じ列を使用しています。これは、結合クエリでSQL selectを書く正しい方法ではありません。 ...別名で正しい句を使用してくださいしてみてください、正しい論理演算子を使用して

1

あなたは、単にこのためINを使用でき

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」を受け取ったらどうなりますか?

関連する問題