2011-05-02 109 views
3

我有一個SQL 2000存儲過程,它具有輸入參數,其數據類型爲varchar(17)以處理字母數字的車輛標識符(VIN)。但是,只要我在執行時爲參數輸入一個數值的數值,就會給我一個錯誤。它似乎只接受字母字符。我在這裏做錯了什麼?允許字母數字值的存儲過程參數數據類型

+0

你是如何調用存儲過程 -/SSMS,或者從代碼查詢分析器,即 - 如果代碼,什麼類型?另外 - 你會得到什麼錯誤? – 2011-05-02 17:55:29

+0

使用SQL查詢分析器(例如:storedProc ) – Don 2011-05-02 17:57:06

+0

錯誤=服務器:消息170,級別15,狀態1,行1 行1:'gn'附近的語法不正確。我在沒有雙引號的情況下輸入「1gn」(語句是「like」不等於,所以你可以輸入vin的一部分)。 – Don 2011-05-02 17:59:20

回答

5

基於註釋,SQL Server有一個微妙的「特徵」,它允許字母a-z用作存儲的不帶分隔符的proc參數。它永遠在那裏(至少從6.5開始)

我不確定整個規則,但它在MSDN (rename SQL Server etc)中演示:「本地」參數周圍沒有分隔符。而我剛發現這個KB article on it

在這種情況下,它可能會以打破的數字開始。我認爲它適用於一個包含的數字(但正如我所說我不確定完整的規則)。

編輯:馬丁確認爲「與領先的數字休息」,確定爲「包含數字」

+0

'exec('create proC#P @x varchar(50)as select @x')exeC#P bar'起作用。 'exeC#P bar1'起作用。 'exeC#P 1bar'失敗。這顯然是參數值未被引用的問題。 – 2011-05-02 18:16:23

+0

YOU DA MAN(gbn)!就是這樣!一旦我單引號分隔輸入參數爲'1gn'它的作品。具有諷刺意味的是,如果你不在VIN的輸入參數前加一個數字(例如:gn6),它可以在沒有分隔符的情況下正常工作 - 去圖! – Don 2011-05-02 18:21:29

-1

這沒什麼幫助,但是在某個地方,您的代碼中存在錯誤,錯誤或疏漏。我花了2年時間把VIN作爲參數工作,除了遺憾沒有使用char var(17)代替ov varchar(17)之外,我們從未遇到任何以字母數字VIN值傳遞的問題。某處,我猜它是在應用程序層,有些東西不喜歡數字 - 也許只是一個過濾器,只查找字母字符?

+0

它甚至不執行SQL存儲過程中的代碼。它在處理輸入參數時立即失敗。 – Don 2011-05-02 18:06:28

相關問題