1

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

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”。
消息 102,级别 15,状态 1,第 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
4

2 回答 2

5

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

于 2012-10-23T12:24:43.467 回答
3

Select into创建一个表。

你可能想要

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

您还需要在例程开始时初始化 @v_max。

set @v_max = 0

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

于 2012-10-23T12:21:53.687 回答