代码之家  ›  专栏  ›  技术社区  ›  Brett

表值参数的条件Where语句?

  •  9
  • Brett  · 技术社区  · 14 年前

    每个TVP都有以下类型:

    TABLE( [variable] nvarchar(30))
    

    我知道我通常可以:

    INNER JOIN @TVP
    

    WHERE (SomeVar = @SameVar OR @SameVar IS NULL)
    

    OUTER APPLY
    (SELECT TOP(1) * from dbo.SomeTable tbl where tbl.SomeVar in 
    (select * from @TVP) or not exists (select * from @TVP)
    AND tbl.SomeVar = SomeVar)
    

    不幸的是,这种方法非常慢

    WHERE (tbl.SomeVar in (SELECT * FROM @TVP) or not exists (SELECT * from @TVP))
    

    这要快得多,但我还是觉得可能不太理想

    任何帮助或想法将不胜感激!如果我能澄清什么,请告诉我…提前谢谢

    编辑:

    所以,我想到了这个,除非有人有更好的解决方案,否则我可能会使用它:

    INNER JOIN @TVP tvp
    ON (tvp.SomeVar = tbl.SomeVar or tvp.SomeVar is null)
    
    1 回复  |  直到 14 年前
        1
  •  12
  •   Joe Stefanelli    14 年前

    你试过:

       DECLARE @UseTVP int
       SET @UseTVP = (SELECT COUNT(*) FROM @TVP) 
    
       SELECT TOP 1 *
            FROM dbo.SomeTable tbl
                LEFT JOIN @TVP tvp
                    ON tbl.SomeVar = tvp.SomeVar
            WHERE (tvp.SomeVar IS NOT NULL
                   OR @UseTVP = 0)