2011-08-18 72 views
0

我有以下表「經理」(簡體):MSSQL存儲過程:用列比較參數,如果ISNUMERIC

ID, int 
Name, nvarchar(100) 

在有一個參數(「搜索」,類型爲nvarchar)的存儲過程,我想選擇所有行上

  1. 通過ID列是完全@Search OR
  2. 的名稱,列包含@Search。

此刻,我在存儲過程中選擇看起來是這樣的:

SELECT ID, Name FROM Managers WHERE 
(ISNUMERIC(@Search) = 1 AND [ID] = CAST(@Search AS INT)) Or 
Contains([Name], @Search) 

如果我調用存儲過程與@Search = 1321(例如),選擇的作品。

但是,如果我有一個@Search參數不是數字(例如「HES」),我得到以下錯誤: 將nvarchar值'HES'轉換爲數據類型int時轉換失敗。

我該如何解決這個問題?

在此先感謝

Raphi

回答

0
SELECT ID, Name FROM Managers 
WHERE [ID] = CASE 
       WHEN ISNUMERIC(@Search) = 1 AND @Search NOT LIKE '%.%' THEN CAST(@Search AS INT) 
       ELSE -1 
      END 
OR Contains([Name], @Search) 
+0

謝謝你,就像一個魅力! :) –

+0

某些東西不起作用:如果參數是十進制值「132.4」,ISNUMERIC返回1,但CAST到INT失敗。 –

+0

@raphael我更新了我的答案。 –