SQL Server:获取“无效的列名”

时间:2012-10-23 12:19:02

标签: sql-server tsql

我正在编写查询,但有一些我找不到的问题。这是我的代码

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 

粗体区域存在问题:

  

Msg 207,Level 16,State 1,Line 18
  列名称“SessionStartTime”无效。
  Msg 207,Level 16,State 1,Line 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

2 个答案:

答案 0 :(得分:5)

@v_count在查询开头声明为int,而不是表格。你不能在那里使用SELECT * INTO @v_count

答案 1 :(得分:3)

Select into创建一个表格。

你可能想要

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

您还需要在日常工作开始时将@v_max初始化。

set @v_max = 0

至于你的其他问题,你的Test表中是否有名为SessionStartTime和SessionCloseTime的列?