繁体   English   中英

存储过程中的SQL游标可填充字符串变量

[英]SQL Cursor within Stored Procedure to populate string variable

我有一个存储过程,该存储过程包含一个游标,用于遍历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 

这是因为@emailBody以NULL开头,并且任何带有NULL的串联默认情况下都会产生NULL。 做一个

SET @emailBody = '';

在脚本的开头。

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

为什么您需要一个光标用于此字符串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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM