小编Mla*_*vić的帖子

在C#和SQL Server中不同地将int转换为guid

在C#和SQL Server中将int转换为guid时,我得到不同的值.

在C#中我使用这种方法

public static Guid Int2Guid( int value )
{
    byte[] bytes = new byte[16];
    BitConverter.GetBytes( value ).CopyTo( bytes, 0 );
    return new Guid( bytes );
}

Console.Write( Int2Guid( 1000 ).ToString() );
// writes 000003e8-0000-0000-0000-000000000000
Run Code Online (Sandbox Code Playgroud)

在SQL Server中我使用

select cast(cast(1000 as varbinary(16)) as uniqueidentifier)
-- writes E8030000-0000-0000-0000-000000000000
Run Code Online (Sandbox Code Playgroud)

他们为什么表现不同?

c# sql-server int guid uniqueidentifier

12
推荐指数
1
解决办法
5603
查看次数

跨服务器管理身份/主键

我正在设计一个需要支持复制的新数据库,而我却决定选择什么作为我的主键.

在我们当前的主键数据库中,我们使用两个int列,第一列是identity,另一列用于描述插入行的服务器.现在我想避免为主键使用两列,而只是使用一列.到目前为止,我有两种方法:

  1. 对我的主键使用GUID

    这个将确保在任意数量的服务器上始终存在唯一密钥.我不喜欢这个,是GUID是16字节大小,当用于跨越许多表的外键时,它将浪费空间.在编写查询时也很难使用它,查询速度会慢一些.

  2. 使用int或bigint,并为每个服务器上的每个表手动指定种子和增量值.例如,如果有两台服务器,第一台服务器上的X表将从1号开始,第二台服务器上的X表将从2号开始,每台将增加2.因此会有(1,3,5,...) ..)首先,和(2,4,6,...)在第二台服务器上.这种设计的好处在于它在编写查询时更容易使用,速度快,而且外键使用的空间更少.不好的是,我们永远不知道将运行多少台服务器,因此很难说出增量值是多少.此外,在服务器上管理架构更改也更加困难.

管理多个服务器的最佳实践是什么?如果出现这种情况,最好的方法是什么?

sql-server identity primary-key

8
推荐指数
1
解决办法
512
查看次数

标签 统计

sql-server ×2

c# ×1

guid ×1

identity ×1

int ×1

primary-key ×1

uniqueidentifier ×1