2016-10-10 3 views
1

私は、フォームアプリケーションから3つの値を受け取るストアドプロシージャを作成しています。値は "biz_abbrev"、 "comp_Name"および "biz_Type"です。ストアドプロシージャは、 "biz_Number"を返します。 "biz_abbrev"の値に応じて、ストアドプロシージャは2つのテーブルから検索するテーブルを決定します。各テーブルには、上記の2つの「comp_Name」と「biz_Type」を含む同様の列があります。 biz_abbrevはアプリケーションによって生成され、 "abbrev1"または "abbrev2"を生成します。 データベース内の2つのテーブルには、「Tbl_Avi」と「Tbl_Marine」という名前が付けられています。以下 表は COMPANY_NAME biz_Type biz_Numberの離職 器Comp1のAA 123 1000000 器Comp1 AA複数の同じCOMPANY_NAMEのためbiz_Numberとbiz_Typeすなわち 表を持っているときまで、ストアドプロシージャがうまく動作します私のストアドプロシージャ私のストアドプロシージャにEXISTSまたはINを使用する

USE [Reports_DB] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [dbo].[spGetBizNo] 
    @biz_Type nvarchar(255), 
    @comp_Name nvarchar(255), 
    @biz_abbrev nvarchar(50) 
    AS 
    DECLARE @biztemptable TABLE (
    biz_Number nvarchar(255)); 

Insert into @biztemptable 

SELECT (
     CASE @biz_abbrev 
     WHEN 'abbrev1' THEN (
     SELECT DISTINCT av.biz_Number FROM dbo.Tbl_Avi av WHERE @comp_Name =  av.Company_Name AND @biz_Type = av.Business_Type) 
     ELSE (
     SELECT DISTINCT mar.biz_Number FROM dbo.Tbl_Marine mar WHERE @comp_Name = mar.Company_Name AND @biz_Type = mar.Business_Type) 
     END) 
SELECT * FROM @biztemptable 

です123 1200000 器Comp2 AB 345123万 器Comp2 AB 345145万

表B COMPANY_NAME biz_Type biz_Numberターンオーバー 器Comp1 AA 123 1000000 器Comp1 AA 124 1200000 器Comp2 AB 345123万 器Comp2 AB 346145万

表Bが

を実行しないであろうが、エラーが表示されるサブクエリは複数の値を返し。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。 ステートメントが終了しました。

上記の文にEXISTSまたはINを使用するにはどうすればよいですか?

+2

エラーメッセージはかなりわかりやすく、サブクエリは1行以上を返しています。代わりにトップ1を使うことができますか?それはあなたが達成しようとしていることとビジネスルールが何であるかにかかっています。最良の結果を得るには、質問を改善するためにこちらをご覧ください。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

+0

複数の一意の結果がある場合は、すべての結果を取得したい –

+0

その後、ロジックを変更する必要があります。 –

答えて

0

あなたがここでやろうとしていることはあまり明確ではありませんが、これに非常に近いものが必要だと思います。

Insert into @biztemptable (biz_Number) 
SELECT DISTINCT av.biz_Number 
FROM dbo.Tbl_Avi av 
WHERE @comp_Name = av.Company_Name 
    AND @biz_Type = av.Business_Type 
    and @biz_abbrev = 'abbrev1' 

UNION ALL 

SELECT DISTINCT mar.biz_Number 
FROM dbo.Tbl_Marine mar 
WHERE @comp_Name = mar.Company_Name 
    AND @biz_Type = mar.Business_Type 
    and @biz_abbrev <> 'abbrev1' 
関連する問題