Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储过程中用于填充字符串变量的SQL游标_Sql_Stored Procedures_Cursors - Fatal编程技术网

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

存储过程中用于填充字符串变量的SQL游标,sql,stored-procedures,cursors,Sql,Stored Procedures,Cursors,我有一个存储过程,其中包含一个游标,用于循环遍历SQL记录并填充字符串,稍后我将使用该字符串作为电子邮件文本。我试图打印出来进行验证,然后才能继续,但它似乎没有填充字符串。这是我在SQLServer2005中的存储过程 CREATE PROCEDURE [dbo].[spBody] AS DECLARE @MyCursor CURSOR DECLARE @emailBody nvarchar(max) DECLARE @statusName nvarchar(max) DECLARE @dep

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

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 = '';
在脚本的开头


此外,强烈考虑添加<代码>设置NOTCOUNT;存储过程顶部的code>语句—不启用NOCOUNT会大大降低过程的执行速度。

这是因为@emailBody开始时为NULL,任何带有NULL的连接默认都会生成NULL。做一个

SET @emailBody = '';
在脚本的开头


此外,强烈考虑添加<代码>设置NOTCOUNT;存储过程顶部的code>语句—不启用NOCOUNT会大大降低过程的执行速度。

为什么需要为该字符串指定一个光标。下面的查询不是后缀吗

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

为什么这个字符串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

这是一个可以让你在SQL中发疯的问题。NULL加上任何值都等于NULL,字符串的默认值为NULL。戴夫·马克尔的精彩绝伦!当你有机会的时候,只需点击投票号码下面的“检查”按钮:)这是一个可以让你在SQL中发疯的按钮。NULL加上任何值都等于NULL,字符串的默认值为NULL。戴夫·马克尔的精彩绝伦!如果你发布代码或XML,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮({}),以很好地格式化和语法突出显示它!如果您发布代码或XML,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮({}),以很好地格式化和语法突出显示它!