2011-01-07 10 views
0

Ich habe eine gespeicherte Prozedur, die einen Cursor enthält, um SQL-Datensätze durchzulaufen, und füllt die Zeichenfolge, die ich später als E-Mail-Text verwenden werde. Ich versuche, es auszudrucken, um zu überprüfen, bevor ich damit fortfahren kann, aber es scheint die Zeichenfolge nicht zu füllen. Hier ist meine gespeicherte Prozedur in SQL Server 2005.SQL Cursor in Stored Procedure zum Auffüllen von String-Variablen

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 

Antwort

6

Es ist, weil @emailBody als NULL beginnt, und jede Verkettung mit NULL liefert standardmäßig NULL. Do a

SET @emailBody = ''; 

am Anfang Ihres Skripts.

Denken Sie auch darüber nach, eine SET NOCOUNT ON;-Anweisung oben in der gespeicherten Prozedur hinzuzufügen - wenn Sie NOCOUNT ON nicht haben, kann dies die Ausführung Ihres Proc erheblich verlangsamen.

+0

Dies ist einer, der Sie verrückt in SQL fahren kann. NULL plus alles ist gleich NULL und der Standardwert für Strings ist NULL. Toller Fang @Dave Markle! –

+0

Vielen Dank für die schnelle Antwort :) es funktioniert jetzt :) – Deepak

+0

Klicken Sie einfach auf diese kleine Schaltfläche "Überprüfen" unter der Abstimmungsnummer, wenn Sie eine Chance bekommen :) –

0

Warum benötigen Sie einen Cursor für diese Zeichenfolge concat. Wont der folgende Query Suffix

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 
+0

Wenn Sie Code oder XML, ** bitte ** markieren Sie diese Zeilen Klicken Sie im Texteditor auf die Schaltfläche "Codebeispiele" ({}) in der Editor-Symbolleiste, um sie schön zu formatieren und zu markieren. –