Stored procedures 允许字母数字值的存储过程参数数据类型

Stored procedures 允许字母数字值的存储过程参数数据类型,stored-procedures,parameters,sql-server-2000,Stored Procedures,Parameters,Sql Server 2000,我有一个SQL 2000存储过程,它有一个数据类型为varchar(17)的输入参数,用于处理字母数字的车辆标识符(VIN)。但是,每当我在执行时为参数输入一个包含数字的值时,它就会给我一个错误。它似乎只接受字母字符。我在这里做错了什么?这没有多大帮助,但在某些地方,您的代码中存在错误、拼写错误或疏忽。我花了2年多的时间使用VIN作为参数,除了后悔没有将其改为char(17)而不是ov varchar(17),我们在传递字母数字VIN值时从未遇到任何问题。在某个地方,我猜是在应用层,有些东西不喜

我有一个SQL 2000存储过程,它有一个数据类型为varchar(17)的输入参数,用于处理字母数字的车辆标识符(VIN)。但是,每当我在执行时为参数输入一个包含数字的值时,它就会给我一个错误。它似乎只接受字母字符。我在这里做错了什么?

这没有多大帮助,但在某些地方,您的代码中存在错误、拼写错误或疏忽。我花了2年多的时间使用VIN作为参数,除了后悔没有将其改为char(17)而不是ov varchar(17),我们在传递字母数字VIN值时从未遇到任何问题。在某个地方,我猜是在应用层,有些东西不喜欢数字——也许是一个只查找字母字符的过滤器?

根据注释,SQL Server有一个微妙的“功能”,允许字母a-z用作存储的过程参数,而不使用分隔符。它一直存在(至少从6.5开始)

我不确定完整的规则,但在中演示了:在“local”参数周围没有分隔符。我刚找到这个

在这种情况下,它可能以一个断开的数字开始。我假设它适用于包含的数字(但正如我所说,我不确定完整的规则)


编辑:由Martin确认为“带前导编号的中断”,对于“包含编号”OK

您如何调用存储过程-即从查询分析器/SSMS或从代码调用-如果是代码,则是什么类型?另外-您会遇到什么错误?使用SQL查询分析器(例如:storedProc)时,错误=Server:Msg 170,级别15,状态1,第1行第1行:“gn”附近的语法不正确。我输入的“1gn”没有双引号(语句的“like”不相等,因此您可以输入vin的一部分)。您需要以单引号分隔输入它。您应该使用参数化查询,但在任何情况下,当它到达SQL Server时,显然没有正确引用它。存储过程是否正在生成动态SQL字符串?请显示代码。它甚至不执行SQL存储过程中的代码。它在处理输入参数时立即失败。
exec('create proc#P@x varchar(50)as select@x')exec#P bar
工作<代码>exec#P bar1工作正常<代码>执行程序1bar失败。这显然是参数值没有被引用的问题。YOU DA MAN(gbn)!就这样!一旦我用单引号将输入参数分隔为“1gn”,它就可以工作了。具有讽刺意味的是,如果您没有在VIN的输入参数前面加上数字(例如:gn6),那么在没有分隔符的情况下它就可以正常工作——如图所示!