【问题标题】:Why does an integer datatype variable accept a string value in a stored procedure in SQL Server? how to solve it?为什么整数数据类型变量在 SQL Server 的存储过程中接受字符串值?如何解决?
【发布时间】:2021-10-05 10:38:57
【问题描述】:

我创建了一个带有@ID 类型的参数integer 的存储过程,当我以varchar 的形式传递一个整数类型值时,它会接受它。

如何验证它,使其不接受像@id='123'这样的varchar形式的整数值?

【问题讨论】:

  • 当在客户端应用程序中设置参数值时,该值将在可能的情况下通过以太 T-SQL(如@Larnu 的答案)或客户端 API 进行隐式转换。您可以根据需要在应用代码中实现验证和/或类型安全。

标签: sql sql-server-2016


【解决方案1】:

它接受它,因为在将值分配给参数之前,该值被隐式转换为int'123' 可以成功地隐式转换为 int,因此该语句可以正常工作。我认为这种行为没有任何问题,因为它在Data type precedence (Transact-SQL) 中是预期和记录的。

如果您要传递一个无法隐式转换为int 的值,例如'123.0''10e2''sardines',则由于隐式转换失败,该语句将出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    相关资源
    最近更新 更多