声明游标以遍历 SQL Server 2008 R2 中的某些值

Pan*_*kaj 5 sql-server-2008 cursors

我有一些业务部门,如印度、国际、美国、英国。

我必须:

  1. 使用与存储过程SP_Report结果集匹配的列创建表变量(虚拟内存表)
  2. 声明一个包含所有业务单位的游标,然后游标应该在 BU 上循环
  3. 对于每个 BU,执行一个存储过程调用SP_Report并将数据插入到表变量中
  4. 最后我必须从表变量+时间戳+BU中选择列,将它们插入另一个表并清除表变量。

代码:

declare @K table (BU nvarchar(max), K nvarchar(max),Y money, A money, D money, YP money)
declare @FY int
declare @BU nvarchar(max)

INSERT INTO @K (BU, K, Y, A, D, YP) 
    EXEC dbo.SP_Report '2012', 'India'

SELECT * FROM @K
Run Code Online (Sandbox Code Playgroud)

此代码返回表变量的结果。现在我必须使用它游标,我不知道如何使用。我怎样才能解决同样的问题。

Mar*_*ith 9

DECLARE CURSOR的 MSDN/BOL 主题包含游标用法的示例语法。也就是说,因为我今天早上在火车上有 5 分钟的空闲时间......

-- Create temporary table for Business Units (replace with the "real" table)
DECLARE @BusinessUnit TABLE (BU NVARCHAR(MAX))

INSERT @BusinessUnit
SELECT 'India' UNION SELECT 'International' UNION SELECT 'US' UNION SELECT 'UK'

DECLARE @K TABLE (BU NVARCHAR(MAX),K NVARCHAR(MAX),Y MONEY,A MONEY,D MONEY,YP MONEY)
DECLARE @FY INT
DECLARE @BU NVARCHAR(MAX)

SET @FY = 2012

DECLARE BU_cursor CURSOR FAST_FORWARD FOR
SELECT BU FROM @BusinessUnit

OPEN BU_cursor
FETCH NEXT FROM BU_cursor INTO @BU

WHILE @@FETCH_STATUS = 0
BEGIN
    INSERT @K (BU, K, Y, A, D, YP)
    EXEC dbo.SP_Report @FY, @BU

    FETCH NEXT FROM BU_cursor INTO @BU
END

CLOSE BU_cursor
DEALLOCATE BU_cursor

SELECT * FROM @K
Run Code Online (Sandbox Code Playgroud)