2017-04-20 65 views
1

我需要创建一个返回列的函数,但是此列必须根据参数在两个不同的表中搜索。在SQL Server 2012中的两个表中搜索的函数

如果参数的值为“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我很高兴看到这个!欢迎来到SO! – Shnugo