【问题标题】:What are the benefits of storing name as "sysname" instead of "nvarchar(128)"?将名称存储为“sysname”而不是“nvarchar(128)”有什么好处?
【发布时间】:2014-03-20 00:03:48
【问题描述】:

我希望创建一个表来存储有关存储过程的信息。我需要存储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) 列有什么好处吗?或者我应该避免使用可能会在以后的版本中删除或更改的专有数据类型?

【问题讨论】:

  • 据我所知,在 NVARCHAR(128) 上使用 SYSNAME 不会有任何好处。我个人不会使用它,但这更像是一个意见问题。
  • 提醒一下,SYSNAME 不能是 NULL,所以应该是 NVARCHAR(128) NOT NULL
  • 我以为我已经在我的问题中指定了这一点。我还阅读了可能的重复内容,这就是我在问题中提到它的原因。
  • 如果我看到sysname,我会立刻想到“好吧,我要在这里找到一个 SQL Server 对象的名称”。可以免费作为额外的“文档”。
  • 不同意关闭,因为重复所以重新打开。这个问题问的是 Sysname 的好处,而不是 Sysname 是什么。

标签: sql sql-server sql-server-2012


【解决方案1】:

它提供了一种抽象,使您免受实现细节的影响。这样做的好处是,如果定义在未来版本中发生更改,您的代码仍然可以正常工作。

sysname 曾经等同于varchar(30)。例如,如果 SQL Server 2016 允许对象标识符的长度为 256 个字符,则您无需查找和更新所有硬编码的 128。

我也更喜欢使用它,因为无论如何使用该数据类型来存储对象标识符的列/变量在语义上看起来更整洁。

【讨论】:

    【解决方案2】:

    我会再次将 SP_Name 存储在 SYSNAME 中吗? NVARCHAR(128) 列?

    您不会获得可衡量的好处;但是,您提到的问题中概述了几个用例,表明收益较少。

    或者我应该避免使用可能被丢弃的专有数据类型 还是在以后的版本中改变了?

    正如 Martin Smith 指出的那样,您应该更喜欢使用那些封装了可能更改的 sql server 内容的类型。

    我将明确添加 technet 指示以下内容,专门针对此数据类型而不是其他特殊类型:

    在区分大小写或具有二进制排序规则的数据库中,sysname 仅在以小写形式出现时才被识别为 SQL Server 系统数据类型。

    【讨论】:

      猜你喜欢
      • 2015-11-30
      • 2010-11-12
      • 2016-08-25
      • 2013-03-06
      • 1970-01-01
      • 2011-05-06
      • 2010-09-20
      • 2020-11-12
      • 2010-09-14
      相关资源
      最近更新 更多