首页新闻找找看学习计划

数据库存储过程的问题

0
悬赏园豆:20 [待解决问题]

1,第一个我想知道的是,在SQLserver数据库中,一条SQL语句同时包含了left join 和 inner join 就是有好多连接,它的执行顺序是从左到右一次执行还是有运算等级的啊?

 

2,帮我看下下面这条语句

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spIC_AA]'))

Drop Procedure  [dbo].[spIC_AA]
GO
Create Procedure [dbo].[spIC_AA]

    @Num int   
AS
Begin
 Declare @SqlSelect  Varchar(500)
 Declare @SqlWhere   varchar(1000)
 Declare @SqlOrder   varchar(100)
 Declare @SqlString  Varchar(4000)
 Declare @SqlTemp    varchar(4000)

    If object_id('tempdb..##Temp') is not null
 Begin
  Drop Table ##Temp
 End 
 Set @SqlSelect = 'Select  C.Number, A.No1, A.No2 From Tbale1 A Left Outer Join (Select B1, B2 From table2 Where C1=(Select MAX(C) From table3)) B On A.No1=b.B1 Inner Join ##Temp C On A.No2=C.C1 Where 1=1 '
 Set @SqlWhere = ''
 Set @SqlOrder = ' Order By TIME'
 ..............

 

上面执行存储过程的时候不是将全局临时表##Temp删除了么,drop表结构已经破坏了啊,为什么在后面可以这么用Inner Join ##Temp C On A.No2=C.C1 Where 1=1 ???

C.C1这个字段是在哪里定义的啊,还是后面加上个where 1=1 就不需要定义就可以这么用,谁跟我细说下,存储过程中临时表的这个用法啊。

cocososo的主页 cocososo | 初学一级 | 园豆:126
提问于:2012-12-21 11:39
< >
分享
所有回答(2)
0

If object_id('tempdb..##Temp') is not null
Begin
  Drop Table ##Temp
End

你这删除表操作没有执行,临时表是没有object_id的

Rich.T | 园豆:3438 (老鸟四级) | 2012-12-21 12:51

对,这句完全没有意义

C.C1 就是##Temp.C1

支持(0) 反对(0) daone | 园豆:273 (菜鸟二级) | 2012-12-27 16:21
0

收藏。。

羽商宫 | 园豆:2493 (老鸟四级) | 2012-12-21 16:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册