Inner Присоединиться с заказом и где clase - PullRequest
2 голосов
/ 18 мая 2019

Я создал хранимую процедуру для заполнения раскрывающегося списка. Но порядок по пункту не работает в моей процедуре.

ALTER PROCEDURE proc
    -- Add the parameters for the stored procedure here
    @compID bigint,
    @after datetime
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    CREATE TABLE #tmpAuc ( ProjectID BIGINT, Title VARCHAR(256))
    INSERT INTO #tmpAuc
    SELECT SA.ID ProjectID, SA.Title 
    FROM [dbo].[Sessions] S
        INNER JOIN Auc SA ON S.AucID = SA.ID
    WHERE S.Session < 3 AND SA.Status > 0 AND SA.CompanyID = @companyID AND S.LiveBeginDate > @after
    ORDER BY LiveBeginDate

    SELECT DISTINCT * FROM #tmpAuc
END

Я хотел бы заказать в порядке убывания LiveBehinDate

Ответы [ 2 ]

2 голосов
/ 18 мая 2019

Включите LiveBeginDate в временную таблицу и из результата временной таблицы ORDER BY LiveBeginDate

CREATE TABLE #tmpAuctions (ProjectID BIGINT, Title VARCHAR(256), LiveBeginDate DATETIME)
INSERT INTO #tmpAuctions (ProjectID, Title, LiveBeginDate)
SELECT SA.ID AS ProjectID, SA.Title, S.LiveBeginDate
FROM [dbo].[Sessions] S
INNER JOIN [Spectrum_Auctions].[dbo].[Auctions] SA ON S.AuctionID = SA.ID
WHERE S.SessionState < 3 AND SA.Status > 0 AND SA.CompanyID = @companyID AND S.LiveBeginDate > @after

SELECT DISTINCT * 
FROM #tmpAuctions
ORDER BY LiveBeginDate

или избегайте временную таблицу и напрямую используйте SELECT с JOIN внутри процедуры:

SELECT SA.ID AS ProjectID, SA.Title
FROM [dbo].[Sessions] S
INNER JOIN [Spectrum_Auctions].[dbo].[Auctions] SA ON S.AuctionID = SA.ID
WHERE S.SessionState < 3 AND SA.Status > 0 AND SA.CompanyID = @companyID AND S.LiveBeginDate > @after
ORDER BY S.LiveBeginDate 
1 голос
/ 18 мая 2019

Это потому, что ваши данные упорядочены при записи во временную таблицу, которая находится в temp dB.Чтение с темп дБ никогда не гарантируется.Поэтому, когда вы выбираете звезду из своей временной таблицы, это то, что вы получаете.Избавьтесь от временной таблицы и сделайте выбор напрямую.Это будет быстрее и эффективнее.Если ваш процесс становится более сложным, используйте CTE вместо временных таблиц, поскольку их легче концептуализировать и выполнять намного быстрее во всех случаях.

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