gpt4 book ai didi

sql-server - 如何在where子句中检查表值参数是否为空?

转载 作者:行者123 更新时间:2023-12-03 22:32:57 25 4
gpt4 key购买 nike

我正在编写一个函数,在其中传递一个表值参数。
在某些情况下,表值参数可以为空。

所以,我的功能如下所示-

CREATE FUNCTION [dbo].[testTableValueParam]
(
@created_date datetime = null
,@Ids dbo.IdList readonly
)
RETURNS TABLE
AS
RETURN
(
SELECT top 10
name
,scores
,mgr_name

from dbo.employee
where
created_date = @created_date
and
employeeId in (select empid from @Ids) --ignore this condition when @Ids is empty.
)

我的表类型创建如下-
CREATE TYPE [dbo].[IdList] AS TABLE(
[empid] [nvarchar](11) NULL
)

我正在从 C# 代码调用我的函数。
在某些情况下,表值参数将为空,在这些情况下,当表值参数为空时,我想忽略 where 子句中的条件。

我在搜索答案时浏览了一些链接,早期帖子中建议的答案并没有解决我的问题。

所以,现在,当@Ids 参数为空时,它不会给我任何记录。
在一些帖子中,他们建议根本不要为表值传递参数,它会自动将其视为空表。
但是我有需要通过数据传递参数的情况。
一些答案建议,使用 if exist(select 1 from @Ids)但是,我不能在 where 子句中使用 if 。

请提供任何建议。
非常感谢您的回答。

谢谢。

最佳答案

您可以使用 NOT EXISTS运算符(operator)之类的......

CREATE FUNCTION [dbo].[testTableValueParam]
(
@created_date datetime = null
,@Ids dbo.IdList readonly
)
RETURNS TABLE
AS
RETURN
(
SELECT top 10
name
,scores
,mgr_name

from dbo.employee
where
(@created_date IS NULL OR created_date = @created_date)
and
(
NOT EXISTS (SELECT * FROM @Ids)
OR
employeeId in (select empid from @Ids)
)
)

关于sql-server - 如何在where子句中检查表值参数是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32252493/

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