2012-10-23 80 views
0

我正在編寫查詢,但有些問題我找不到。這裏是我的代碼SQL Server:獲取「無效列名」

begin 
    declare @v_max int 
    declare @v_count int 
    declare @sessionID int 
    declare @sessionStart datetime 
    declare @sessionEnd datetime 

    declare my_cursor cursor local for 
     select * from Test; 

    open my_cursor 
    fetch next from my_cursor INTO @sessionID, @sessionStart, @sessionEnd 

    while @@FETCH_STATUS = 0 
    begin 
     select * into **@v_count** 
     from [dbo].[Test] 
     WHERE **[dbo].[Test].[SessionStartTime]** > @sessionStart 
     OR **[dbo].[Test].[SessionCloseTime]** < @sessionEnd 

     if @v_count > @v_max 
      set @v_max = @v_count 


     fetch next from my_cursor INTO @sessionID, @sessionStart, @sessionEnd 
    end 

    print @v_max; 

    close my_cursor 
    deallocate my_cursor 
end 

粗體地區有問題:

消息207,級別16,狀態1,行18
無效的列名稱SessionStartTime「。
消息207,級別16,狀態1,行19
無效的列名'SessionCloseTime'。
Msg 102,Level 15,State 1,Line 16
'@v_count'附近語法不正確。

這裏是我的表

CREATE TABLE [dbo].[Test]( 
    [ScenarioID] [bigint] NULL, 
    [SessionStartTime] [datetime] NOT NULL, 
    [SessionCloseTime] [datetime] NULL 
) ON [PRIMARY] 

這裏是我的表

CREATE TABLE [dbo].[Test](
    [ScenarioID] [bigint] NULL, 
    [SessionStartTime] [datetime] NOT NULL, 
    [SessionCloseTime] [datetime] NULL 
) ON [PRIMARY] 

GO 

回答

3

Select into創建一個表。

你可能想

select @v_count = count(*) 
from [dbo].[Test] 
... 

你還需要在你的日常的開始initalise @v_max。

set @v_max = 0 

至於你的其他問題,你的測試表中是否有名爲SessionStartTime和SessionCloseTime的列?

+0

是的,但我不明白爲什麼會出現此問題 – cihata87

+0

@ cihata87請在問題中顯示您的表格結構。 – podiluska

+0

我已經添加了結構 – cihata87

5

@v_count在查詢開始時聲明爲int而不是表格。那裏不能使用SELECT * INTO @v_count

+0

謝謝Sponfereixus – cihata87