0

我正在使用下面的代码,但它返回错误 -

关键字“AS”附近的语法不正确

我希望查询使用现有表中的数据创建一个表。

create table Allactivity as
(
    select dbo.dim_client.*,dbo.dim_transaction.* 
    from dbo.dim_client,dbo.dim_transaction,dbo.fact_capital   
    where dbo.dim_client.dim_client_key=dbo.fact_capital.dim_client_key
        and dbo.dim_transaction.dim_transaction_key=dbo.fact_capital.dim_transaction_key
)
4

2 回答 2

2

看起来您正在使用 Microsoft SQL Server。T-SQL 有不同的语法:SELECT INTO:

http://msdn.microsoft.com/en-us/library/ms190750.aspx

select dbo.dim_client.*,dbo.dim_transaction.* 
into Allactivity
from dbo.dim_client,dbo.dim_transaction,dbo.fact_capital   
where dbo.dim_client.dim_client_key=dbo.fact_capital.dim_client_key
    and dbo.dim_transaction.dim_transaction_key=dbo.fact_capital.dim_transaction_key
于 2013-08-12T14:36:54.710 回答
0

如果您使用 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;


于 2013-08-12T19:54:03.183 回答