問題陳述得到的所有值:基於一個變量:SQL查詢來從一列取多個值的數據或從該列
- 當
@a
具有單個字(實施例'name1'
)OR逗號分隔的字符串(例'name1,name2,name3'
),則查詢應與name1 and name2 and name3
- 返回僱員的經理名稱時
@a
有那麼一個空字符串在emp_master
表返回所有員工的經理姓名
我已經定義了一個存儲過程,我傳遞一個變量。
該變量可以是逗號分隔的字符串,單個單詞或空字符串。
如果字符串是逗號,然後分開後,我拆分字符串,並基於分裂聲明 其他 的返回表我得到的非逗號的相關值獲取值使用正常的子查詢
我曾嘗試分離數據通過以下方式實現這一目標對上述樣品
Declare @a varchar(50)= ''
select emp.Name from
emp_master emp
where
(LEN(@a)=0 AND emp.Name in
(
SELECT DISTINCT [Name] FROM
[dbo].[Emp_Master] WHERE [EmpId] IN
(
SELECT
DISTINCT [MGR_ID]
FROM [dbo].[Emp_Master]
)
)
)
OR
emp.Name in (Select * from [dbo].[SplitString](@a, ','))
詳情:
[dbo]。[SplitString] - 自定義書寫功能:返回分割值表。所以
SELECT * FROM [DBO] .SplitString
將返回
SplitTable
----------
name1
name2
name3
和
Select * from [dbo].[SplitString](',','name1')
將返回
SplitTable
----------
name1
- [dbo]。[Emp_Master]包含數據的所有員工
- [MGR_ID]是具有僱員管理者
- @a的僱員ID列是輸入變量
- 數據庫是MS SQL 2008
我目前的解決方案(上述瘋狂的查詢)解決了我的目的,但它是非常緩慢的,這將有助於獲取問題
- Emp_master表有40萬行,30列的優化和更快的工作解決方案
- 有18名000經理在該表
shaik你的代碼是可能的原因有三慢: (1)參數嗅探 (2)標量功能在哪裏條件 (3)不良指數 –
當@a用逗號分隔字符串時,它可能有多長? –