问题陈述得到的所有值:基于一个变量: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用逗号分隔字符串时,它可能有多长? –