日期:2014-05-19  浏览次数:20653 次

这里为什么不能加括号?
表TradeTable如下:CustomereId   int,   TradeTime   datetime,   TransMoney   money
现在想取得每月交易金额最大的客户的客户号(要求使用表变量)

declare   @t   table(CustomereId   int,   TotalMoney   money)
insert   into   @t  
-----------------------------------------------
(select     CustomereId,   sum(TransMoney)   as   total  
from   TradeTable
where   datediff(mm,TradeTime,getdate())   =   0
group   by   CustomereId
order   by   total   desc)
-------------------------------------------------
select   top   1   CustomereId   from   @t
运行失败,但是去掉注释线间的代码的括号后,就运行成功,即
declare   @t   table(CustomereId   int,   TotalMoney   money)
insert   into   @t  
select     CustomereId,   sum(TransMoney)   as   total  
from   TradeTable
where   datediff(mm,TradeTime,getdate())   =   0
group   by   CustomereId
order   by   total   desc
select   top   1   CustomereId   from   @t
不知道为什么会这样?请哪位能指点一二 ,谢谢




------解决方案--------------------
不是不能把结果集括起来,这个要看具体情况的。

比如insert的语法就是insert into table1 select fieldlist from table2
这种情况下肯定不能加()

而select * from (select top 1 * from table1)a
这种情况下就必须加()了
------解决方案--------------------
往表里插入值的时候,如果是用Insert开头的话,只有后面跟有Value的,才需要用括号 。
如果是把一个查询的结果集插入的话,就不需要括号。

这是语法规定的,没有原因。