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)
任何人都可以分享您的专业知识。
我有一个 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)