私は、フォームアプリケーションから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を使用するにはどうすればよいですか?
エラーメッセージはかなりわかりやすく、サブクエリは1行以上を返しています。代わりにトップ1を使うことができますか?それはあなたが達成しようとしていることとビジネスルールが何であるかにかかっています。最良の結果を得るには、質問を改善するためにこちらをご覧ください。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
複数の一意の結果がある場合は、すべての結果を取得したい –
その後、ロジックを変更する必要があります。 –