【问题标题】:Get all records if table valued parameter is null如果表值参数为空,则获取所有记录
【发布时间】:2013-12-13 11:30:29
【问题描述】:

如果表值参数为空,我想获取列的所有值,否则只有匹配的记录。我已经尝试过了,但是当子查询返回多条记录时会出错:

ALTER PROCEDURE [dbo].[usp_MY_SP]
(
    @TVP ABCTableType readonly,
)
AS

    SELECT *

    FROM TABLE t

    WHERE
        t.Id IN(
            CASE WHEN (SELECT COUNT([Id]) FROM @TVP) > 0 
                THEN (SELECT [Id] FROM @TVP)
                ELSE (t.Id)
            END
        )

【问题讨论】:

    标签: sql-server stored-procedures table-valued-parameters


    【解决方案1】:

    你可以这样做

    ALTER PROCEDURE [dbo].[usp_MY_SP]
    (
        @TVP ABCTableType readonly
    )
    AS
    
          SELECT * FROM t
          WHERE
              ((SELECT COUNT([Id]) FROM @TVP) = 0)
              OR
              t.Id IN (SELECT [Id] FROM @TVP)
    

    【讨论】:

    • 不,我想在 where 子句中添加类似 IF 的条件,因为我还有其他参数要匹配的不仅仅是这个单个参数
    猜你喜欢
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多