我正在使用SQL Server 2008 R2。
在表格中,我有一个VARCHAR(50)
类型的列。我正在存储一些字母数字数据。数据具有不同的长度,即从用户输入插入。
现在,我确实需要在同一个数据中存储NEWID() - UNIQUEIDENTIFIER
类型的数据。但我已经存在无法修改的现有数据。因此,我不是将列的数据类型从VARCHAR
转换为UNIQUEIDENTIFIER
,而是考虑在同一列中以NEWID()
格式存储VARCHAR
。
建议这样做吗?
答案 0 :(得分:0)
如果您所说的专栏不是用作主键或索引,那么您就不会有任何问题 - 您可以随意存储。
如果该列已经是索引甚至主键,您将遇到相同的问题(关于您的帖子说数据的长度可变)
如果在进行此更改时引入索引或主键,则应考虑使用可变长度列对此可能产生的性能影响。
如果以上是不可避免的,那么一个好的建议就是尝试将列的大小减小到36(我认为这是大多数系统和框架生成的唯一标识符的标准长度,包括UNIQUEIDENTIFIER类型的SQL Server,通过5个字母数字实体表示,完全由用(4)连字符分隔的32个符号组成。
如果当前数据的大小可以安全地设置为36个符号,我建议重新定义之前的列,使其成为索引或PK,尤其是如果您的表已经有很多行。
如果可能的话,还要将其重新定义为CHAR(36)(或者甚至是评论中建议的NCHAR(36)) - 固定长度列作为索引表现更好。此外,MS SQL Server 2005及更高版本支持NEWSEQUENTIALID()
函数以生成顺序ID。这些对索引或PK列表现更好。