如何 select 游标中的多个列?

How do I select multiple columns in a cursor?

如何 select 游标中的多个列? 我测试了下面的代码,但它 returning/printing 什么都没有。

DECLARE @DateAdded VARCHAR(50)
DECLARE @IdEmployee NVARCHAR(20)
DECLARE @EmailAddress VARCHAR(100)
DECLARE @Subject VARCHAR(50)
DECLARE @Message VARCHAR(100)
DECLARE @DateSent VARCHAR(50)

-- 2 - Declare Cursor
DECLARE db_cursor CURSOR FOR 
    -- Populate the cursor with your logic
    -- * UPDATE WITH YOUR SPECIFIC CODE HERE *
    SELECT 
        @DateAdded, @IdEmployee, @EmailAddress,
        @Subject, @Message, @DateSent
    FROM #tblLeaveNotifToApprover

OPEN db_cursor

FETCH NEXT FROM db_cursor INTO @DateAdded, @IdEmployee, @EmailAddress, @Subject, @Message, @DateSent

WHILE @@FETCH_STATUS = 0  
BEGIN  
    -- 4 - Begin the custom business logic
    -- * UPDATE WITH YOUR SPECIFIC CODE HERE *
    PRINT CONVERT(VARCHAR,@DateAdded)

    FETCH NEXT FROM db_cursor INTO @DateAdded, @ IdEmployee, @EmailAddress, @Subject, @Message, @DateSent
END 

CLOSE db_cursor  
DEALLOCATE db_cursor 

最初想打印每一行中的所有列,但是在 运行 之后 snippet/code 什么都没有显示,我也尝试将变量转换为 varchar 抛出相同的结果。

我希望打印出我的 7 行的所有列。

将您的 CURSOR 视为来自源 table 的一组选定数据,然后您将对其进行迭代。

您的代码段包含识别 CURSOR 中内容的提示,在您的情况下请参考

-- Populate the cursor with your logic
-- * UPDATE WITH YOUR SPECIFIC CODE HERE *

在您的例子中,您正在尝试使用您使用以下语句声明的变量的值来填充您的 CURSOR:

SELECT @DateAdded,
            @IdEmployee,
            @EmailAddress,
            @Subject,
            @Message,
            @DateSent
FROM #tblLeaveNotifToApprover   

现在,由于您还没有填充这些变量,所以它们都是 NULL 然后你做的是SELECT你刚刚声明的变量回到变量!!!!!

FETCH NEXT FROM db_cursor INTO @DateAdded,@IdEmployee,@EmailAddress,@Subject,@Message,@DateSent
WHILE @@FETCH_STATUS = 0

因此,当您尝试打印这些内容时,您什么也得不到返回也就不足为奇了。

回到您的 DECLARE CURSOR 并确保您确实选择了要迭代的数据集。 CURSOR 通常应该总是有点像临时的 table。如果我们假设您的 temp table #tblLeaveNotifToApprover 具有与您的变量名称匹配的列名称,那么您需要:

DECLARE db_cursor CURSOR FOR 
SELECT DateAdded,
       IdEmployee,
       EmailAddress,
       Subject,
       Message,
       DateSent
FROM #tblLeaveNotifToApprover

这是错误的

DECLARE db_cursor CURSOR FOR 
-- Populate the cursor with your logic
-- * UPDATE WITH YOUR SPECIFIC CODE HERE *
SELECT 
    @DateAdded, @IdEmployee, @EmailAddress,
    @Subject, @Message, @DateSent
FROM #tblLeaveNotifToApprover

您需要将此 SELECT 语句中的变量替换为 table 中的实际列名。在 FETCH 语句之前,您不会引用局部变量。