【问题标题】:t-sql dynamic cursorst-sql 动态游标
【发布时间】:2011-04-03 14:20:46
【问题描述】:

我可以使用变量来声明游标吗??

我想创建动态光标,我该怎么做??

问候

我有桌子: 创建表 [UsersUniTask] ( [id] 唯一标识符约束 [DF_UsersUniTask_id] 默认 newid() 非空, [userUniID] uniqueidentifier NOT NULL, [taskID] int 非空, [时间] 日期时间不为空, [doTask] int 非空, [优先级] int NOT NULL, 约束 [PK_UsersUniTask] 主键集群([id]), 约束 [FK_UsersUniTask_UsersUni] 外键 ([userUniID]) 参考文献 [UsersUni] ([id]) 更新无动作 删除级联 ) 开 [主要] 去吧

【问题讨论】:

    标签: tsql cursor


    【解决方案1】:

    你能解释一下你的意思吗?如果您正在讨论在动态上下文中声明光标,如下例所示,那么您可以:

    DECLARE @i int -- variable input
    DECLARE @valuableData int
    
    SET @i = 1 -- value for that input, this could be set by a query
    
    DECLARE cursorFoo CURSOR FOR
        SELECT valuableData
        FROM myTable
        WHERE someParameter = @i
    
    OPEN cursorFoo 
    
    WHILE (1=1)
    BEGIN
        FETCH NEXT FROM cursorFoo 
             INTO @valuableData
    
        IF (@@FETCH_STATUS <> 0) BREAK
    
        SELECT @valuableData -- Do something with your data
    END
    
    CLOSE cursorFoo
    

    由于在 cmets 中的讨论而编辑

    这里应该有两个独立的程序循环

    循环 1:

    1. Web 服务将任务添加到永久 包含优先级信息的表格。

    循环 2:

    1. 服务器脚本查询永久 最重要的任务表
    2. 服务器脚本从 表和流程任务(或手 将该信息发送到脚本 这样做的工作
    3. 服务器脚本恢复为永久 表并寻找最重要的 任务

    SQL 旨在存储数据,而不是循环和处理数据。该处理应使用服务器脚本完成。该脚本应该从数据库中获取数据。当 SQL 同时写入、读取和循环遍历同一个临时表时,您开始遇到现在遇到的并发问题。您可以在 SQL 中进行处理,但您应该只对仅与该特定进程相关的数据使用临时表。

    【讨论】:

    • 我有游标的循环过程,我得到一个游标存在的错误,我想创建动态游标。我必须创建游标的动态名称,这是唯一的。我想做这样的事情:Declare @CursorName nvarchar(500) set @CursorName = 'AddTaskCursor'; DECLARE @CursorName CURSOR FAST_FORWARD READ_ONLY FOR ... 但是这样我不能:(
    • 不,您不能动态声明游标名称。您只能动态定义游标的参数。如果您在脚本运行后遇到游标未关闭的问题,请在 CLOSE 语句后添加“DEALLOCATE cursorName”。
    • 我的光标如下所示: DECLARE AddTaskCursor CURSOR FAST_FORWARD READ_ONLY FOR (SELECT id, userUniID, taskID, doTask, priority FROM @Tasks) Open AddTaskCursor --TODO ZROBIĆ WYWOŁANIE PROCEDURY --在这个地方我执行带有此游标的过程是 - 并且此过程不能声明具有名称的游标,该名称正在使用 CLOSE AddTaskCursor; DEALLOCATE AddTaskCursor;如您所见,有 Close AND Deallocate
    • 也许我的问题的其他解决方案:我想对临时表中的所有记录执行过程
    • 你能发布你的代码吗?我对它的外观感到非常困惑。如果您尝试递归调用存储过程,那只是个坏主意。在游标内部调用游标也是一个坏主意。
    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    相关资源
    最近更新 更多