Хранимая процедура SQL 2008 ничего не возвращает, если CROSS APPLY - ничто.Как я могу исправить? - PullRequest
0 голосов
/ 03 октября 2009

Приведенный ниже процесс возвращает данные из ряда связанных таблиц, а также выполняет перекрестное применение к таблице голосов. Это перекрестное применение возвращает среднее значение всех значений правдивости в столбце истинности, связанном с конкретным articleid, и то же самое для столбца релевантности. Это прекрасно работает, за исключением случаев, когда еще нет голосов за определенный articleid. В этом случае сохраненный процесс ничего не возвращает вообще. Может кто-нибудь придумать хороший способ решить эту проблему, если я не хочу выдумывать запись в таблице голосов?

( @ArticleID int )

AS
BEGIN
WITH Article AS
(

SELECT
tbrm_Article.ArticleID, 
tbrm_Article.CountryID,
tbrm_Article.CategoryID,
tbrm_Article.Title,
tbrm_Article.ArticleDetail,
tbrm_Article.Source,
tbrm_Article.ArticleDateTimeAdded,
tbrm_Article.UserId,
tbrm_Article.ViewCount,
tbrm_Article.CommentCount,
tbrm_CountryList.CountryName AS CountryName,
tbrm_CategoryList.CategoryName AS CategoryName,
aspnet_Users.UserName AS UserName,
Truthfulness,
Relevance

FROM         
tbrm_Article INNER JOIN
tbrm_CountryList ON tbrm_Article.CountryID = tbrm_CountryList.CountryID INNER JOIN
tbrm_CategoryList ON tbrm_Article.CategoryID = tbrm_CategoryList.CategoryID INNER JOIN
aspnet_Users ON tbrm_Article.UserID = aspnet_Users.UserID
CROSS APPLY (
SELECT tbrm_Votes.ArticleID, AVG(tbrm_Votes.TruthID), AVG(tbrm_Votes.RelevanceID)
FROM tbrm_Votes
WHERE tbrm_Article.ArticleID = tbrm_Votes.ArticleID
GROUP BY tbrm_Votes.ArticleID
) AS Votes(ArticleID,Truthfulness,Relevance)

WHERE

tbrm_Article.ArticleID = @ArticleID)
SELECT * FROM Article
END

1 Ответ

2 голосов
/ 03 октября 2009
OUTER APPLY

Аналогично НАРУЖНОЕ СОЕДИНЕНИЕ .

Кстати, не называйте SQL 2008 «SQL 08». Это заставило меня задуматься над SQL 2000 (т.е. v8).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...