Если вы знаете SQL оптимизируйте этот скрипт
пожалуйста, не используйте Temptable из-за проблемы с производительностью ، у меня есть время с cardNo, что я хочу найти соответствующую кадровую базу на некоторую дату вступления в силу. каждый персонал может иметь несколько EffectiveDate с различными CardNo
<pre>CREATE PROCEDURE [dbo].[PersonnelDetails_GetPersonnelByCardNoAndTime] ( @CardNo VARCHAR(16), @Time SMALLDATETIME ) AS DECLARE @PersonnelBaseID INT; DECLARE @EffectiveDate SMALLDATETIME; SELECT EffectiveDate,PersonnelBaseID,CardNo INTO #PersonnelDetails FROM ( SELECT personnelDetails.EffectiveDate, personnelDetails.PersonnelBaseID, CardNo FROM dbo.tkp_PersonnelDetails AS personnelDetails INNER JOIN ( SELECT MAX(EffectiveDate) AS EffectiveDate,details.PersonnelBaseID FROM dbo.tkp_PersonnelDetails AS details INNER JOIN prs_Personnel personnel ON personnel.ID = details.PersonnelBaseID AND Personnel.Active = 1 AND Personnel.Deleted = 0 AND details.Deleted = 0 AND details.EffectiveDate <= @Time GROUP BY PersonnelBaseID )result ON (result.PersonnelBaseID = personnelDetails.PersonnelBaseID AND result.EffectiveDate = personnelDetails.EffectiveDate AND personnelDetails.Deleted = 0 AND CardNo = @CardNo) )details WHERE CardNo = @CardNo ORDER BY details.Effectivedate DESC SELECT TOP 1 @PersonnelBaseID = PersonnelBaseID , @EffectiveDate = EffectiveDate, @CardNo = CardNo FROM #PersonnelDetails ORDER BY Effectivedate DESC IF ((SELECT COUNT(DISTINCT PersonnelBaseID) FROM #PersonnelDetails WHERE EffectiveDate = @EffectiveDate AND CardNo = @CardNo) > 1)--handle Multi Personnel With On CardNo In same EffectiveDate :( SELECT 0; ELSE SELECT @PersonnelBaseID; DROP TABLE #PersonnelDetails
Что я уже пробовал:
пожалуйста, не используйте Temptable из-за проблемы с производительностью ، у меня есть время с cardNo, что я хочу найти соответствующую кадровую базу на некоторую дату вступления в силу. каждый персонал может иметь несколько EffectiveDate с различными CardNo
PIEBALDconsult
Неужели там весь код? Похоже, что части отсутствуют. Не все скобки закрыты, и что там еще делает этот человек?
Избегайте подзапросов; попробуйте использовать вместо них общие табличные выражения.
И зачем идти на все эти неприятности только для того, чтобы получить счет?
mhd.sbt
Привет PIEBALDconsult :)
В этом бизнесе есть сумма персонала с одинаковым эффективным состоянием и одним Кардно،
Я хочу отфильтровать этот персонал ، если этот запрос сталкивается с этим условием мы должны вернуть 0 а в другом случае мы должны вернуть связанный персонал с carno :(
и этот новый скрипт работает правильно ، bu имеет низкую производительность при больших данных
PIEBALDconsult
Угу. И ответы на мои вопросы...?
mhd.sbt
какой именно?
PIEBALDconsult
Я считаю до трех.