Saa*_*ail 3 sql sql-server sql-server-2005 alias-data-type
我正在开始一个新项目,我正在考虑在我的SQL Server 2005数据库中使用别名数据类型,用于公共表列.例如,我将定义一个别名数据类型来保存对象的名称,如下所示:
CREATE TYPE adt_Name FROM varchar(100)not null
然后使用它来定义表列,确保我的所有列共享完全相同的定义(长度,可空性,精度等).
好处:
可重用和可共享,ADT可以在其创建的数据库中重复使用,如果您希望它跨所有数据库,则在模型数据库中创建它
执行,ADT将强制执行其基本类型的特征,长度和可空性,并可用于执行开发标准
禁止隐式转换,ADT不能是CAST或CONVERTed
与其他语言一样简单,ADT为开发和维护提供了简便性
数据隐藏
缺点:
不可修改,无法直接修改ADT,您必须DROP并重新创建它们.请注意,您仍然可以将它们所在的表更改为另一个基本类型或ADT,然后DROP并重新创建它们,然后更改表(或者只创建一个新表以将其更改为).
没有工具,必须使用CREATE语句使用直接查询创建ADT(不推荐使用sp_addtype,不应使用它).
表变量不受支持
命名约定:
Linq to SQL:
我会反对它.我支持一些拥有使用它们的产品的顾客,他们是一个不变的PITA(脚踝疼痛).
特别是,除非您还在TempDB中定义它们,否则不能在#temp表中使用它们.由于每次重新启动SQL Server时TempDB都会重置,这意味着每次重新启动SQL Server时都必须重新定义它们.但这意味着启动程序必须在Master中并具有某些权限.由于Alias定义(实际上是术语中的UDT)可能会发生变化,这意味着DBA必须授予其他人编辑该过程的权限,这可能是一个安全问题.
哦,以免我忘记,如果你必须升级,迁移或重新安装你的服务器,你需要该proc的外部副本重新添加到Master,你需要记住这样做.
然后还有局限性:根据我的经验,开发人员希望使用这些"Alias",因为他们认为如果需要,它将为他们提供更改定义的灵活性.它不会.持久性数据不像持久性代码,它没有那种灵活性,SQL Server根本不会帮助你.在你尝试这样做之后,你会很快得出结论,你从来没有应该首先使用过这些东西.