В моем SP я создаю временную таблицу #PolicyNumbers
и заполняю ее Policy Numbers
на основе параметров, которые будут переданы SP.Каким будет правильный способ использования предложения EXISTS
CREATE TABLE #PolicyNumbers (PolicyNumber varchar(50))
INSERT INTO #PolicyNumbers SELECT PolicyNumber
FROM PlazaInsuranceWPDataSet
WHERE State IN (SELECT * FROM [dbo].[StringOfStringsToTable](@State,','))
AND Coverage IN (SELECT * FROM [dbo].[StringOfStringsToTable](@Coverage,','))
AND SICCode IN (SELECT * FROM [dbo].[StringOfStringsToTable](@SICCode,','))
ниже в моем SP я использую EXISTS
заявление, чтобы фильтровать только те PolicyNumber
S, которые были выбраны на основе параметров.
WHERE EXISTS (SELECT PolicyNumber FROM #PolicyNumbers pn WHERE pn.PolicyNumber = piwp.PolicyNumber)
Так что результат от #PolicyNumbers
НЕ содержат дублирует PolicyNumbers:
Тогда furthure в моем SP я имею SELECT
заявление и результат содержит также продублировать PolicyNumber
S:
SELECT
PolicyNumber,
Cast(PolicyEffectiveDate AS DATE) AS PolicyEffectiveDate,
Cast(PolicyExpirationDate AS DATE) AS PolicyExpirationDate,
WrittenPremium
FROM PlazaInsuranceWPDataSet
А теперь я использую EXIST
заявление:
SELECT
PolicyNumber,
Cast(PolicyEffectiveDate AS DATE) AS PolicyEffectiveDate,
Cast(PolicyExpirationDate AS DATE) AS PolicyExpirationDate,
WrittenPremium
FROM PlazaInsuranceWPDataSet piwp
WHERE EXISTS (SELECT PolicyNumber FROM #PolicyNumbers pn WHERE pn.PolicyNumber = piwp.PolicyNumber)
это все правильно до сих пор? Если да, то почему у меня есть немного другой результат, используя оператор SELECT
и передающий те же параметры в статье WHERE
с использованием IN (@MyParameter)?
SELECT
PolicyNumber,
Cast(PolicyEffectiveDate AS DATE) AS PolicyEffectiveDate,
Cast(PolicyExpirationDate AS DATE) AS PolicyExpirationDate,
WrittenPremium
FROM PlazaInsuranceWPDataSet piwp
WHERE State IN (@State)
AND SICCode IN (@SICCode)
AND Coverage IN (@Coverage)
#Mendosi спасибо. Удивительное объяснение. И спасибо за пример. Очень приятно это знать. Это просто приводит меня к другому вопросу, какой путь был бы правильным? Или я должен сказать более уместным? Или это зависит от цели? Цель состоит в том, чтобы выбрать номера политик на основе параметров, а затем рассчитать заработок для этих политик. Я хочу работать с политиками, которые имеют только SICCode, State и Coverage. Поэтому я бы предположил, что использование '# PolicyNumbers' и' EXISTS' будет правильным. Я прав? – Oleg
Похоже, что версия 'EXISTS' верна для вас, чтобы ответить на этот вопрос. – mendosi