繁体   English   中英

SP执行错误

[英]SP executing error

我写在SP下面。但是当我尝试运行此查询时,我收到此错误:

数据库中已经有一个名为“#myCourses1”的对象。

所以这进入了两个其他循环。

create proc [dbo].[GetOrdersByUserIDwithSubscription]     
(    
    @UserID int    
)    
as    
begin    

    declare @status varchar(500)

    declare @substatus char(2)

    select @substatus=Subscribe_status from tbl_user where userid=@userid

    print @substatus

    if  @substatus='N'

    BEGIN    
        select a.*, b.CategoryText, Cast('' as Varchar(10)) as SectionsViewed, PurchasedDate as dateadded into #myCourses1 from dbo.Tbl_CourseInformations  a JOIN Tbl_Categories b ON a.AssignCategory = b.CategoryID    
        Join Tbl_Orders c ON c.UserID = @UserID and c.CourseID = a.CourseID  and c.courseprice<>'subscriber'  
        Order By CategoryText, CourseTitle         
    END  

    else if @substatus=''

    BEGIN    
        select a.*, b.CategoryText, Cast('' as Varchar(10)) as SectionsViewed, PurchasedDate as dateadded into #myCourses1 from dbo.Tbl_CourseInformations  a JOIN Tbl_Categories b ON a.AssignCategory = b.CategoryID    
        Join Tbl_Orders c ON c.UserID = @UserID and c.CourseID = a.CourseID and c.courseprice<>'subscriber'   
        Order By CategoryText, CourseTitle       
    END  

    else if @substatus='Y'    
    BEGIN    
        select a.*, b.CategoryText, Cast('' as Varchar(10)) as SectionsViewed, PurchasedDate as dateadded into #myCourses1 from dbo.Tbl_CourseInformations  a JOIN Tbl_Categories b ON a.AssignCategory = b.CategoryID    
        Join Tbl_Orders c ON c.UserID = @UserID and c.CourseID = a.CourseID    
        Order By CategoryText, CourseTitle 
    END 

此外,您拥有的查询的怪异性可以简化为:

create proc [dbo].[GetOrdersByUserIDwithSubscription](    
    @UserID int    
)    
as    
begin
    declare @substatus char(2)

    select @substatus = Subscribe_status 
    from tbl_user 
    where userid = @userid

    select a.*, b.CategoryText, 
        Cast("" as Varchar(10)) as SectionsViewed, 
        PurchasedDate as dateadded 
    from dbo.Tbl_CourseInformations a 
        join Tbl_Categories b ON a.AssignCategory = b.CategoryID
        join Tbl_Orders c ON c.UserID = @UserID 
            and c.CourseID = a.CourseID 
            and (@substatus = 'N' or c.courseprice <> 'subscriber')
    order by CategoryText, CourseTitle         

END

SQL解析器因为你在IF语句的不同部分使用了相同的临时表名而令人窒息。 IF没有其他编程语言的范围。

如果您不需要在每个IF块之外引用临时表,则可以通过在每个部分中使用不同的表名来解决问题。

看看我对类似问题的回答

你的语法是

SELECT [Column-List] INTO #TempTable FROM [Rest-of-Query]

使用此语法时,Sql Server会尝试根据列列表( )动态创建#TempTable。

要解决这个问题,可以在存储过程开始时Drop #TempTable (如果您不需要超出SP范围的数据),或者将其设置为永久表。

在proc的开头显式创建临时表。

CREATE TABLE #myCourses1 (
    ...
)

然后将SELECT语句编写为:

INSERT INTO #myCourses1
    select a.*, b.CategoryText, Cast('' as Varchar(10)) as SectionsViewed, PurchasedDate as dateadded 
        from dbo.Tbl_CourseInformations
        ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM