如果您使用 select into 语法,您将需要具有动态创建表的权限。
另一种解决方案是与 DBA 合作提前创建临时表。然后每次清除并加载暂存表。让 DBA 授予您或应用程序对表的权限。这可以是 db_datareader 和 db_datawriter,它的访问权限比 db_owner 少很多!
我确实注意到您使用旧语法进行连接,您应该使用新语法来实现前向兼容性。
http://www.straightpathsql.com/archives/2012/11/sql-server-join-syntax-its/
--
-- DBA - 创建空的新表(假设存在阶段模式)
--
选择
dc.*,
dt.*
从dbo.fact_capital
进入
stage.all_activity
作为 fc
left join
dbo.dim_client as dc
on fc.dim_client_key = dc.dim_client_key
left join
dbo.dim_transaction as dt
on fc.dim_transaction_key = dt.dim_transaction_key
where ( 1 = 0);
-- 用户/应用程序 -
从 stage.all_activity 中清除表删除;
-- 用户/应用程序 - 添加一些数据(+ where 范围的子句)
插入
stage.all_activity
select
dc.*,
dt.*
from
dbo.fact_capital as fc
left join
dbo.dim_client as dc
on fc.dim_client_key = dc.dim_client_key
left join
dbo.dim_transaction as dt
on fc.dim_transaction_key = dt.dim_transaction_key;