2017-04-20 12 views
1

列を返す関数を作成する必要がありますが、この列はパラメータによって2つの異なるテーブルで検索する必要があります。SQL Server 2012の2つのテーブルを検索する関数

パラメータの値が "F"の場合、関数はテーブル "A"を検索し、そうでない場合はテーブル "B"で検索されます。

これは可能ですか?

私はさまざまな方法で関数を作成しようとしましたが、正しく動作させることができませんでした。

は、あなたが動的に文を作成し、あなたがテーブルの名前として変数を使用することはできませんを使用することはできません機能で

非常
CREATE FUNCTION [dbo].[getAlm] 
    (@doc nvarchar(20), @type nvarchar(1)) 
RETURNS TABLE 
AS 
    RETURN 
     IF (@type = 'F') 
     (
      SELECT [Center] 
      FROM [BDX].[dbo].[TABLE_A] 
      WHERE [No_] = @doc 
     ) 
     ELSE 
     (
      SELECT [Center] 
      FROM [BDX].[dbo].[TABLE_B] 
      WHERE [No_] = @doc 
     ); 

答えて

1

、ありがとうございました。しかし、あなたはUNION ALLを使用することができます。

DECLARE @SourceTable VARCHAR(100)='Table_A'; 

SELECT [Center] 
FROM [BDX].[dbo].[TABLE_A] 
WHERE @SourceTable='Table_A' 
    AND [No_] = @doc 

UNION ALL 

SELECT [Center] 
FROM [BDX].[dbo].[TABLE_B] 
WHERE @SourceTable='Table_B' 
    AND [No_] = @doc 

これはあなたの状況

SELECT [Center] 
FROM [BDX].[dbo].[TABLE_A] 
WHERE @type='F' 
    AND [No_] = @doc 

UNION ALL 

SELECT [Center] 
FROM [BDX].[dbo].[TABLE_B] 
WHERE @type<>'F' 
    AND [No_] = @doc 
+0

こんにちはShnugoです! ありがとうございます。あなたのソリューションは完璧に動作します。 もう一度ありがとうございます。 – Eric

+0

こんにちは@Eric私はこれを読むことがうれしいです!ようこそ! – Shnugo

関連する問題