我有一個SQL 2000存儲過程,它具有輸入參數,其數據類型爲varchar(17)以處理字母數字的車輛標識符(VIN)。但是,只要我在執行時爲參數輸入一個數值的數值,就會給我一個錯誤。它似乎只接受字母字符。我在這裏做錯了什麼?允許字母數字值的存儲過程參數數據類型
回答
基於註釋,SQL Server有一個微妙的「特徵」,它允許字母a-z用作存儲的不帶分隔符的proc參數。它永遠在那裏(至少從6.5開始)
我不確定整個規則,但它在MSDN (rename SQL Server etc)中演示:「本地」參數周圍沒有分隔符。而我剛發現這個KB article on it
在這種情況下,它可能會以打破的數字開始。我認爲它適用於一個包含的數字(但正如我所說我不確定完整的規則)。
編輯:馬丁確認爲「與領先的數字休息」,確定爲「包含數字」
'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
YOU DA MAN(gbn)!就是這樣!一旦我單引號分隔輸入參數爲'1gn'它的作品。具有諷刺意味的是,如果你不在VIN的輸入參數前加一個數字(例如:gn6),它可以在沒有分隔符的情況下正常工作 - 去圖! – Don 2011-05-02 18:21:29
這沒什麼幫助,但是在某個地方,您的代碼中存在錯誤,錯誤或疏漏。我花了2年時間把VIN作爲參數工作,除了遺憾沒有使用char var(17)代替ov varchar(17)之外,我們從未遇到任何以字母數字VIN值傳遞的問題。某處,我猜它是在應用程序層,有些東西不喜歡數字 - 也許只是一個過濾器,只查找字母字符?
它甚至不執行SQL存儲過程中的代碼。它在處理輸入參數時立即失敗。 – Don 2011-05-02 18:06:28
- 1. 只允許字母數字值
- 2. 存儲過程和壞的數據類型爲nvarchar到數字
- 3. 陣營原生鍵盤類型:數字允許字母「E」
- 4. 只允許字母數字字符
- 5. 允許數字中的小數點的MDB數據類型?
- 6. 存儲過程中參數的條件數據類型轉換
- 7. 存儲過程參數類型
- 8. Modrewrite允許數字,字母,下劃線
- 9. 具有多個允許值類型的數據庫字段
- 10. MSSQL存儲過程參數類型使用數據庫表列
- 11. SQL:datetime或VARCHAR作爲參數數據類型存儲過程
- 12. 如何在postgres中以整數類型存儲字母數字值?
- 13. 數據庫:可以是數字或字母數字的存儲值
- 14. 驗證:允許數字和字母數字圖案
- 15. 數據類型字節不允許添加任何文字
- 16. 在字母數字字符串中存儲整數值
- 17. cassandra數據庫文本類型是否允許存儲html?
- 18. PostgreSQL存儲過程數據參數
- 19. 配置單元中字母數字字符的數據類型
- 20. ASP.Net VB存儲過程允許空參數 - 如何將NULL爲空的整數傳遞到存儲過程
- 21. AppEngine數據存儲區密鑰名稱中允許的字符
- 22. 存儲過程的錯誤轉換數據類型爲nvarchar到數字
- 23. 如何過濾字符串,以便只允許字母數字字符通過
- 24. 數據表以字節[]字段作爲存儲過程的參數
- 25. Sqlite存儲字符串值在數字或真正的數據類型
- 26. 打字稿是否允許爲lambda參數定義類型?
- 27. 在存儲過程中不允許加載數據
- 28. 使用sql存儲過程生成字母數字序列
- 29. 允許對JTextField的字符存儲僅是數字
- 30. 存儲加密字段數據的最佳數據類型
你是如何調用存儲過程 -/SSMS,或者從代碼查詢分析器,即 - 如果代碼,什麼類型?另外 - 你會得到什麼錯誤? – 2011-05-02 17:55:29
使用SQL查詢分析器(例如:storedProc) –
Don
2011-05-02 17:57:06
錯誤=服務器:消息170,級別15,狀態1,行1 行1:'gn'附近的語法不正確。我在沒有雙引號的情況下輸入「1gn」(語句是「like」不等於,所以你可以輸入vin的一部分)。 – Don 2011-05-02 17:59:20