t-sql动态游标

时间:2010-08-25 08:01:33

标签: tsql cursor

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

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

此致

我有桌子: CREATE TABLE [UsersUniTask](   [id] uniqueidentifier CONSTRAINT [DF_UsersUniTask_id] DEFAULT newid()NOT NULL,   [userUniID] uniqueidentifier NOT NULL,   [taskID] int NOT NULL,   [time] datetime NOT NULL,   [doTask] int NOT NULL,   [priority] int NOT NULL,   CONSTRAINT [PK_UsersUniTask] PRIMARY KEY CLUSTERED([id]),   CONSTRAINT [FK_UsersUniTask_UsersUni] FOREIGN KEY([userUniID])   参考[UsersUni]([id])   更新没有行动   ON DELETE CASCADE ) ON [主要] GO

1 个答案:

答案 0 :(得分:2)

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

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

由于评论中的讨论而编辑

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

循环1:

  1. Webservice将任务添加到永久性 有优先权信息的表格。
  2. 循环2:

    1. 服务器脚本查询永久 最重要的任务表
    2. 服务器脚本从中删除任务 表和流程任务(或手 该信息关闭到脚本 做的工作
    3. 服务器脚本恢复为永久性 表和寻找最重要的 任务
    4. SQL旨在存储数据,而不是循环并处理它。应使用服务器脚本完成处理。该脚本应该从数据库中获取数据。当SQL正在同时写入和读取并循环遍历同一个临时表时,您现在就开始遇到并发问题。您可以在SQL中进行处理,但只应将临时表用于仅与该特定进程相关的数据。