0
我有具有一組由唯一的編號標識,然後,接着對它們的描述屬性的屬性表 - 一個例子的模式是微軟SQL查詢的多個條件
ID - AttributeName
下面
一些示例數據1 = FirstName
2 = LastName
3 = Phone
然後我有一個僱員表爲簡單起見,具有以下模式
ID - PersonID
AttribueID - INT Foreign key to the above attributes table
我需要創建一個存儲過程,給定條件將返回基於以下條件之一的記錄
如果我將1傳遞給存儲過程,proc應該返回Person表中所有匹配屬性ID 1(名字) 如果我將2傳遞給存儲過程,proc應該返回Person表中的所有記錄*不匹配屬性ID 1(名字) 如果我傳入一個3存儲過程proc應該返回Person表中的所有記錄
我可以做以下操作但覺得這不是可以執行的最佳方式
DECLARE @IntID INT = 1 -- Set as 1 just for exmple
IF @IntID =1
BEGIN
SELECT * FROM Person where AttributeID IN (SELECT ID from Attributes Where ID =1) -- match on attribute 1
END
ELSE IF @IntID = 2
BEGIN
SELECT * FROM Person where AttributeID NOT IN (SELECT ID from Attributes Where ID =1) -- do not match on attribute 1
END
ELSE
BEGIN
SELECT * FROM Person where AttributeID IN (SELECT ID from Attributes) -- return match on all attributes
END
上面的例子有一個非常簡單的SELECT語句 - 在現實的SQL有一個更大的提前
將多個案例組合成單個通用選擇會導致次優執行計劃,我通常會建議避免這種情況。 –