如何在光标中选择多个列

  • 本文关键字:选择 光标 sql-server
  • 更新时间 :
  • 英文 :


如何在光标中选择多个列?我测试了下面的代码,但它没有返回/打印任何内容。

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 

最初我想打印每行中的所有列,但在运行代码段/代码后,它什么都不显示,我还尝试将变量转换为varchar。

我希望我的7行中的所有列都能打印出来。

这是错误的

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语句中的变量替换为表中的实际列名。在FETCH语句之前,您不会引用您的局部变量。

将CURSOR视为源表中选定的一组数据,然后对其进行迭代。

您的代码段包含识别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通常应该总是有点像临时表。如果我们假设临时表#tblLeaveNotifToApprover的列名与变量名匹配,那么您需要:

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

最新更新