我的代码将此作为表中列的默认值:
[QuestionUid] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL,
将它作为UNIQUEIDENTIFIER,我想这是正确的方法,但如果我将它存储为VARCHAR(50)该怎么办。这使得在使用我的C#代码时更简单,因为我现在遇到一些关于类型不匹配的错误。
答案 0 :(得分:0)
uniqueidentifier数据类型用于合并replcation,其中ROWGUIDCOL属性被分配给此数据类型的列。这样就可以在数据库服务器之间合并数据时消除行重复。
可以使用varchar(50)... char(36)数据类型,因为在合并复制时,如果没有具有uniqueidentifier数据类型的列,SQL Server将使用此数据类型添加自己的列
唯一的问题可能是该表会有两列uniqueidentifiers!如果在合并复制点将数据类型更改为uniqueidentifier,则可以避免这种情况。然后SQL Server可以将ROWGUIDCOL分配给此列。
这对您的C#项目并不一定有帮助,但是尝试使C#项目与uniqueidentifier一起工作可能会更加困难。我不知道C#,但我确信它必须具备解决这个问题的便利。
答案 1 :(得分:0)
你的桌子有多大?我问,因为UNIQUEIDENTIFIER只需要16个字节,而你的varchar(50)会占用更多。虽然我们在谈论这个,为什么varchar(50)? guid将始终具有相同的长度,因此根本不需要可变长度; char(40)会做得很好。无论哪种方式,您占用的空间都是错误数据类型的两倍。这是浪费在缓冲池中的所有空间,必须在索引维护期间进行维护,浪费在涉及此列的每个索引中等等。那么你能做到吗?当然。我会这样做吗?没有。
答案 2 :(得分:0)
Guid(uniqueidentifier)是128位数。它可以像其他数字类型一样轻松编入索引(int / bigint / etc ...)。
将GUID存储为varchar(50)是错误的决定,例如将整数存储在varchar中。