SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读--当开发者不大熟悉脚本时尤其有用。SQL Prompt安装即可使用,能大幅提高编码效率。此外,用户还可根据需要进行自定义,使之以预想的方式工作。

本教程说明了SQL_VARIANT数据类型的“怪癖”,以及为什么最好调查SQL Prompt何时提醒您使用它。如果在使用之前将其显式转换为真实类型,那么将数据存储为SQL_VARIANT才是唯一安全的。

sql_variant数据类型来自几个不同数据类型的值,并由SQL Server在内部使用。它不是SQL标准的一部分,在关系数据库中的用途有限。需要小心处理它,因为它的误用会导致难以追踪的性能问题和bug。sql_variant不能直接传递给某些SQL运算符和函数,例如LIKE、SUM()或者AVG(),并且在比较或表达式中使用时会产生误导性结果。除二进制数据外,它不能通过ODBC返回到应用程序。

SQL Server是一种强类型语言,这样做是为了确保数据完整性、高效存储和有效检索。由于这个原因,使用sql_variant有点奇怪,因此通过不明智地使用它会无意中造成问题也就不足为奇了。出于这些原因,SQL Prompt强制执行“最佳实践”代码分析规则(BP024),该规则将提醒您使用sql_variant数据类型。

word-image-42.png

与许多“最佳实践”规则一样,这些建议有时听起来像是告诉人们在拿着剪刀时不要跑。在这种情况下,只有在使用数据sql_variant之前将其显式转换为真实类型,才能将数据存储为安全。

为什么有sql_variant?

sql_variant数据类型是在微软从Sybase开发的SQL Server时首次引入的。他们需要能够从微软首次进入数据库市场的Microsoft Access将数据库导入SQL Server,该市场支持变体数据类型。它仍然在SQL Server内部用于系统存储过程的参数以及扩展属性等数据。

sql_variant倾向于作为用户定义函数返回的列、变量、参数或值的catch-all数据类型。它最多可以容纳8000个字节,并且可以存储基本数据类型,如整数、小数、字符串和日期。它不能存储其他一些数据类型,例如(MAX)数据类型、CLR数据类型或XML。