如何 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 语句之前,您不会引用局部变量。
如何 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 语句之前,您不会引用局部变量。