gpt4 book ai didi

使用通配符变量连接 SQL 表

转载 作者:行者123 更新时间:2023-12-01 06:32:03 24 4
gpt4 key购买 nike

我有两个连接表。表 1 有客户数据,表 2 有他们的状态。

我需要一个通配符名称搜索,但我只希望它根据表 2 中的状态返回结果。当我在 @ClientName 变量中实际输入一些数据时,这有效,但当它为空时,它返回所有记录并忽略@ClientStatus 变量。有想法该怎么解决这个吗?

DECLARE @ClientName NVARCHAR (100) = '' 
DECLARE @ClientStatus INT = 1

SELECT DBO.CLIENTS.CLIENTID,
DBO.CLIENTS.FIRST_NAME,
DBO.CLIENTS.LAST_NAME,
DBO.CLIENTS.PHONE_NUMBER,
DBO.CLIENTS.MOBILE_NUMBER,
DBO.CLIENTS.HOUSE_ADDRESS_NUMBER,
DBO.CLIENTS.STREET_NAME,
DBO.CLIENTS.TOWN_CITY,
DBO.CLIENTS.POST_CODE,
DBO.CLIENTS.EMAIL_ADDRESS,
DBO.CLIENTS.CLIENT_SOURCE,
DBO.CLIENTS.CLIENT_STATUS,
DBO.CLIENTS.DATE_ADDED,
DBO.CLIENTS.CALL_DATE,
DBO.CLIENTS.CALL_TIME,
DBO.CLIENT_STATUS.CLINIC_STATUS
FROM DBO.CLIENTS
INNER JOIN DBO.CLIENT_STATUS
ON DBO.CLIENTS.CLIENT_STATUS = DBO.CLIENT_STATUS.STATUSID
WHERE ( DBO.CLIENT_STATUS.CLINIC_STATUS = @ClientStatus )
AND ( DBO.CLIENTS.LAST_NAME LIKE @ClientName + '%' )
OR ( DBO.CLIENTS.MOBILE_NUMBER LIKE @ClientName + '%' )

最佳答案

首先,我猜你真的想对你的 OR 进行分组。条件,因为它的优先级高于 AND

AND (( DBO.CLIENTS.LAST_NAME LIKE @ClientName + '%' ) 
OR ( DBO.CLIENTS.MOBILE_NUMBER LIKE @ClientName + '%' ))

更重要的是,它没有忽略变量。当您不为 @ClientName 提供任何东西时最终条件变为
( DBO.CLIENTS.LAST_NAME LIKE '%' ) 
OR ( DBO.CLIENTS.MOBILE_NUMBER LIKE '%' )

%是一个通配符,你告诉它匹配任何东西。为了解决这个问题,您要么需要传入一个名称,要么以某种方式处理 NULL/空白输入。

关于使用通配符变量连接 SQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19258452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com