我希望创建一个存储有关存储过程的信息的表。我需要存储SP_Name
。我最初的计划是使用SP_Name NVARCHAR(128) NOT NULL
。
从程序我将使用OBJECT_NAME(@@PROCID)
函数获取SP_Name
列的值。
此technet未提供有关SYSNAME
数据类型的大量信息。 What is SYSNAME data type in SQL Server?问题只解释它是什么,但不解释它是如何工作的,另外答案已经快3年了,微软在2012年和2014年版本中对SQL Server做了很多升级。
将SP_Name
存储在SYSNAME
列NVARCHAR(128)
之后,是否还有什么好处?或者我应该避免使用可能在以后版本中删除或更改的专有数据类型吗?
答案 0 :(得分:6)
它提供了一个抽象,可以保护您免受实现细节的影响。好处是如果定义在将来的版本中发生变化,您的代码仍然可以正常工作。
sysname
过去相当于varchar(30)
。例如,如果SQL Server 2016允许对象标识符长度为256个字符,则无需查找和更新所有硬编码的128。
我也更喜欢使用它,因为无论如何都要在语义上更整洁地使用该数据类型来存储对象标识符的列/变量。
答案 1 :(得分:0)
我是否会再次在SYSNAME中存储SP_Name的任何好处 NVARCHAR(128)专栏?
您将无法获得可衡量的收益;但是,您引用的问题中列出了几个用例,表明收益较少。
或者我应该避免使用可能被丢弃的专有数据类型 或在以后的版本中更改过?
正如Martin Smith指出的那样,你应该更喜欢使用那些封装可能会改变的sql server东西的类型。
我将明确添加technet指示以下内容,特别是此数据类型而不是其他特殊类型:
在区分大小写或具有二进制排序规则的数据库中,仅当sysname以小写字母显示时,它才会被识别为SQL Server系统数据类型。