У меня есть следующая функция:
CREATE FUNCTION fGetTransactionStatusLog
(
@TransactionID int
)
RETURNS varchar(8000) AS
BEGIN
declare StatusChanges cursor for
select NewStatusID, FirstName + ' ' + LastName AS UserName, Stamp, CAST(Notes AS varchar(8000)) AS Notes
from TransactionStatusChanges tsc
left join Users us ON tsc.UserID = us.UserID
where TransactionID = @TransactionID ORDER BY StatusNum
declare @output varchar(8000)
declare @NewStatusID char(2)
declare @UserName varchar(255)
declare @Stamp datetime
declare @Notes varchar(8000)
set @output = ''
OPEN StatusChanges
FETCH NEXT FROM StatusChanges INTO @NewStatusID, @UserName, @Stamp, @Notes
WHILE @@FETCH_STATUS = 0
BEGIN
set @output = @output + RTRIM(CAST(@Stamp AS varchar(30))) + ': ' + @NewStatusID + ' by ' + @UserName + CHAR(13) + CHAR(10)
IF @Notes IS NOT NULL
BEGIN
set @output = @output + '---' + @Notes + CHAR(13) + CHAR(10)
END
FETCH NEXT FROM StatusChanges INTO @NewStatusID, @UserName, @Stamp, @Notes
END
CLOSE StatusChanges
DEALLOCATE StatusChanges
RETURN @output
END
Теперь эта функция возвращает именно то, что я хочу для Транзакций, в которых нет записей в каких-либо записях ...
Для транзакции, в которой есть хотя бы одна запись в TransactionStatusChanges с полем не-NULL Notes, я получаю NULL.
Я не совсем понимаю, так как я проверяю, что @Notes не NULL, прежде чем конкатировать его.
Есть идеи?
ПРИМЕЧАНИЕ: я использую varchar (8000), потому что не могу использовать текст внутри функций.