2011-05-02 71 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

相关问题