【问题标题】:SQL Cursor within Stored Procedure to populate string variable存储过程中的 SQL 游标填充字符串变量
【发布时间】:2011-01-07 20:09:22
【问题描述】:

我有一个存储过程,其中包含一个游标,用于循环遍历 SQL 记录并填充我稍后将用作电子邮件文本的字符串。我正在尝试将其打印出来以进行验证,然后才能继续进行,但它似乎没有填充字符串。这是我在 SQL Server 2005 中的存储过程。

CREATE PROCEDURE [dbo].[spBody] 
AS
DECLARE @MyCursor CURSOR
DECLARE @emailBody nvarchar(max)
DECLARE @statusName nvarchar(max)
DECLARE @deptCode nvarchar(max)
DECLARE @instructors nvarchar(max)
DECLARE @meetingTime nvarchar(max)

SET @MyCursor = CURSOR FAST_FORWARD For
Select StatusName, DeptCode, Instructors, Description from MyTable where StatusID = (select CAST(value AS INT) from Table2 where ConfigOption = 'RequiredStatus')

Open @MyCursor
FETCH NEXT FROM @MyCursor INTO @statusName, @deptCode, @instructors, @meetingTime


WHILE @@FETCH_STATUS = 0

BEGIN
 SET @emailBody = @emailBody + @statusName + ' ' + @deptCode + ' ' + @instructors + ' ' + @meetingTime 
 FETCH NEXT FROM @MyCursor INTO @statusName, @deptCode, @instructors, @meetingTime

END
CLOSE @MyCursor
Print @emailBody

DEALLOCATE @MyCursor 

【问题讨论】:

    标签: sql stored-procedures cursors


    【解决方案1】:

    这是因为@emailBody 以 NULL 开头,任何与 NULL 的串联默认都会产生 NULL。做一个

    SET @emailBody = '';
    

    在脚本的开头。

    另外,强烈考虑在存储过程的顶部添加 SET NOCOUNT ON; 语句 - 没有 NOCOUNT ON 会大大减慢 proc 的执行速度。

    【讨论】:

    • 这是一个可以让你在 SQL 中发疯的方法。 NULL 加上任何值等于 NULL,字符串的默认值为 NULL。很棒的@Dave Markle!
    • 当你有机会时,只需点击投票号码下方的那个小“检查”按钮 :)
    【解决方案2】:

    为什么这个字符串 concat 需要一个游标。不会出现以下查询后缀

    DECLARE @emailBody nvarchar(max) 
    
    Set @emailBody = ''
    
    Select @emailBody = @emailBody + StatusName + ' ' + DeptCode + ' ' + Instructors + ' ' + [Description] from MyTable where StatusID = (select CAST(value AS INT) from Table2 where ConfigOption = 'RequiredStatus')
    
    Print @emailBody
    

    【讨论】:

    • 如果您发布代码或 XML,在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮 ( { } ) 以很好地格式化语法高亮!
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    相关资源
    最近更新 更多