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 就不需要定义就可以这么用,谁跟我细说下,存储过程中临时表的这个用法啊。
If object_id('tempdb..##Temp') is not null
Begin
Drop Table ##Temp
End
你这删除表操作没有执行,临时表是没有object_id的
对,这句完全没有意义
C.C1 就是##Temp.C1
收藏。。