我有一个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