我被困在了一个点上。如果实体类型值是订舱或JOb,那么它将根据其基础进行筛选,但如果为空或空字符串(‘’),则希望它返回包含作业和预订的所有行
create proc spproc
@entityType varchar(50)
as
begin
SELECT TOP 1000 [Id]
,[EntityId]
,[EntityType]
,[TenantId]
FROM [FutureTrakProd].[dbo].[Activities]
where TenantId=1 and EntityType= case @EntityType when 'BOOKING' then 'BOOKING'
when 'JOB' then 'JOB'
END
end任何帮助都是值得赞赏的。
谢谢你
发布于 2018-08-02 11:48:58
create proc spproc
@entityType varchar(50)
as
begin
SELECT TOP 1000 [Id]
,[EntityId]
,[EntityType]
,[TenantId]
FROM [FutureTrakProd].[dbo].[Activities]
where TenantId=1 and (@EntityType is null OR EntityType= @EntityType)
end发布于 2018-08-02 11:49:20
不需要CASE表达式,只需要一个OR。以下几点应该使你走上正确的道路:
WHERE TenantId=1
AND (EntityType = @EntityType OR @EntityType IS NULL)另外,注意将参数声明为NULLable也是明智的:
CREATE PROC spproc @entityType varchar(50) = NULL这意味着某人可以简单地排除参数值,而不是必须传递NULL (因此,EXEc spproc;可以工作)。
最后,如果您有大量的NULLable参数,那么您将看到一个“所有捕获”查询;如果是这样的话,解决方案就会有所不同。“捕获-所有”查询可能是众所周知的缓慢。
发布于 2018-08-02 11:49:20
您不需要使用case表达式,您可以:
SELECT TOP 1000 [Id], [EntityId], [EntityType], [TenantId]
from [FutureTrakProd].[dbo].[Activities]
WHERE TenantId = 1 AND
(@EntityType IS NULL OR EntityType = @EntityType)
ORDER BY id; -- whatever order you want (asc/desc)对于查询过程,您需要声明显式的ORDER BY子句,否则TOP 1000会给出随机的Id。
https://stackoverflow.com/questions/51652826
复制相似问题