我正在寻找创建一个函数,该函数将任何表中的指定列连接到我的主表中。该函数的预期用途如下:
Select *
From [Main Table] A
Outer Apply get_Factor([Table1], [Column_Name], Col1, [Key1] ) As [Factor_A]
Outer Apply get_Factor([Table2], [Column_Name], Col2, [Key2] ) As [Factor_B]
Outer Apply get_Factor([Table9], [Column_Name], Col1, [Key1], Col2, [Key2]) As [Factor_C]
该函数本质上是一个联接,但是我现在不知道使它具有动态数量的键。
CREATE FUNCTION [dbo].[get_Factor]
(
@Table_Name VARCHAR(10)
, @Column_Name VARCHAR(10)
/* not sure how to add a dynamic amount of keys here. There can be more than 3 keys. */
)
RETURNS TABLE
AS
RETURN
(
SELECT @Column_Name
FROM @Table_Name
WHERE @Col1 = @key1 And @Col2 = @key2 And @Col3 = @key3 /* ...etc */
)
GO
列应为字符串(例如“公司代码”),键应为主表中的变量(例如[公司代码])。
答案 0 :(得分:1)
这个评论太长了。
您的代码没有工作的希望。您无法使用参数替换查询中的标识符,因此无法按预期使用@table_name
或@column_name
。
显而易见的解决方案是使用动态SQL。但是,SQL Server用户定义函数中不允许动态SQL。
有一些奥秘的选项可以解决此问题,例如:
或者,找到其他方法来完成您想要的。糟糕的数据模型可能会导致您需要此功能,因此修复数据模型将简化查询。