2013-12-13 45 views
2

如果表值參數爲空,我想獲取所有列值,否則只有匹配的記錄。我曾經試過,但在子查詢返回多個記錄它給出了一個錯誤:如果表值參數爲空,則獲取所有記錄

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 
     ) 

回答

2

你能做到這樣

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) 
+0

不,我要添加IF像條件在where子句,因爲我還有其他的參數不僅僅是這個單一的 –

+0

好吧,我明白了。現在檢查編輯。 – Szymon

+1

它爲我工作。非常感謝您的幫助。 –

相關問題