Select 在 sql 中动态查看

Select View dynamically in sql

任何人都可以分享您的专业知识。

我有一个 table 包含 customerid 并且它在给定时间只有 1 个特定值。

DDL Table:

CREATE TABLE CUSTOMER
 (

   [CUSTOMERID] [int] NOT NULL
     )

 INSERT     CUSTOMER

 SELECT 100 UNION
 SELECT 105 UNION
 SELECT 108

在示例中我显示了 3 个值,但是 在 table 中总会有 1 个值 在给定的时间 . 在加载其他值之前,第一个值将被删除。

现在我为 60 个不同的客户创建了 60 个视图。每个客户都有不同的数据模式和与之关联的逻辑。

视图示例。注意:这只是示例而非实际逻辑

CREATE VIEW V1
as
(
select * from dwhtable
where colummnx = '100'
)

similarly 

CREATE VIEW V2
as
(
select * from dwhtable
where columnx = '105
)

映射Table

create table mapping_table
(
custID int,
view_name varchar (150)
)

insert mapping_table

select 100, 'v1' union all
select 105, 'v2' union all
select 108, 'v3'

我正在尝试通过 SP 或 Function 或 DynamicSQL 自动执行整个过程。

所以我的观点将 运行 针对特定客户。 现在我们如何知道哪个视图适合哪个客户。

客户 table 会出现在图片中,我们需要匹配客户 table 中的值以及包含该值的视图。

我不确定在 sql 中是否可以实现。 请分享您的专业知识。

谢谢

不确定我是否正确理解了任务。所以要求是每个客户有一个视图。我们需要从该视图中获取给定客户的所有列。

所以你需要有一个映射 table Customer_View_Mapping (customer_id int, view_name varchar(128))

然后就可以得到视图的名称:

declare @name varchar(128)
select @name = view_name from Customer_View_Mapping where customer_id = @customer_id

您可以执行如下操作:

EXEC (N'select * from ' + @name)

如果需要,您可以将结果插入临时 table。

INSERT INTO #table (<column list>)
EXEC (N'select * from ' + @name)