【发布时间】:2017-04-17 23:27:27
【问题描述】:
在我的 SP 中,我正在创建一个临时表 #PolicyNumbers,并根据将提供给 SP 的参数用 Policy Numbers 填充它。
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 语句仅过滤那些
PolicyNumbers 是根据参数选择的。
WHERE EXISTS (SELECT PolicyNumber FROM #PolicyNumbers pn WHERE pn.PolicyNumber = piwp.PolicyNumber)
所以#PolicyNumbers 的结果确实包含重复的 PolicyNumber:
然后在我的 SP 中,我有 SELECT 语句,结果还包含重复的 PolicyNumbers:
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 语句和使用IN (@MyParameter) 在WHERE 子句中传递相同参数的结果略有不同?
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)
【问题讨论】:
标签: sql-server tsql stored-procedures exists