选择在sql中动态查看

时间:2016-08-11 05:58:05

标签: sql sql-server dynamic-sql

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

我有一个包含customerid的表,它在给定时间只有1个特定值。

DDL表:

CREATE TABLE CUSTOMER
 (

   [CUSTOMERID] [int] NOT NULL
     )

 INSERT     CUSTOMER

 SELECT 100 UNION
 SELECT 105 UNION
 SELECT 108

这里的示例我已经在表格中显示了3个值,在给定时间总是有1个值 ,在加载其他值之前,第一个值将被删除。

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

观点的例子。注意:这只是示例而非实际逻辑

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

similarly 

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

映射表

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自动完成整个过程。

所以我的观点将针对特定客户。 现在我们如何知道哪个视图与哪个客户有关。

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

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

由于

1 个答案:

答案 0 :(得分:0)

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

所以你需要有一个映射表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)

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

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