Так что у меня это работает правильно:
CREATE FUNCTION dbo.GetLiveStream(@UserName NVARCHAR(MAX)) RETURNS TABLE
AS
RETURN (
SELECT DISTINCT l.*
FROM StreamView l
JOIN Friendships f ON f.Sender = @UserName OR f.Recipient = @UserName
WHERE l.Sender <> @UserName
AND l.Recipient <> @UserName
AND ( l.Sender = f.Recipient
OR l.Sender = f.Sender
OR l.Recipient = f.Sender
OR l.Recipient = f.Recipient)
)
GO
Но при попытке сделать следующий запрос:
SELECT ROW_NUMBER() OVER(ORDER BY DateTime DESC) AS RowNumber,
*
FROM dbo.GetLiveStream('jason')
WHERE RowNumber >= 0
AND RowNumber < 0+ 10;
Я получаю следующую ошибку:
Сообщение 207, Уровень 16, Состояние 1, Строка 4
Неверное имя столбца 'RowNumber'.
Сообщение 207, Уровень 16, Состояние 1, Строка 5
Неверное имя столбца 'RowNumber'.
Обратите внимание, что указание l.*
возвращает эту ошибку:
Сообщение 107, Уровень 15, Состояние 1, Строка 2
Префикс столбца 'l' не совпадает с именем таблицы или псевдонимом, используемым в запросе.
GetLiveStream - это функция:
RETURN (
SELECT DISTINCT l.*
FROM StreamView l
JOIN Friendships f ON f.Sender = @UserName OR f.Recipient = @UserName
WHERE l.Sender <> @UserName
AND l.Recipient <> @UserName
AND ( l.Sender = f.Recipient
OR l.Sender = f.Sender
OR l.Recipient = f.Sender
OR l.Recipient = f.Recipient) AND f.IsPending = 0
)
Как это можно решить? Спасибо.