gpt4 book ai didi

c# - 使用 64 位有符号值在 SQL 和 C# 中模拟 128 位无符号整数?

转载 作者:太空宇宙 更新时间:2023-11-03 18:00:41 24 4
gpt4 key购买 nike

以这种情况为例:您在 C# 中有一些标志枚举与 SQL Server 中的 Enum-ish 表相关联(实际上是从中生成的)。假设您是分销商,您允许您的经销商指定他们运送到美国的哪些州。作为一名出色而优雅的软件工程师,您将这些实现为可按位组合的标志值以节省存储空间:

create table USState (
StateID bigint, StateAbbr char(2), StateName varchar(50))
/* insert all US States + DC into USState, StateIDs must be in powers of two */
/* StateID 0 reserved for 'None': */
create procedure GetStatesByFlag (@StateFlags bigint) as
declare @StateIDs table
(
StateID bigint,
primary key (StateID)
)
insert into @StateIDs
select StateID
from USState
where @StateFlags & StateID != 0
or (@StateFlags = 0 and StateID = 0)

select s.StateID, s.StateAbbr, s.StateName
from
USState s join
@StateIDs si
on si.StateID = s.StateID

甜甜的。您可以使用按位逻辑在 SQL 和 C# 中动态包含/排除,这使您可以立即在 Asp.NET 中混合复选框列表和选择列表,同时仍然只存储一个 64 位数字来保存任何选择组合。并且您不需要在过程的 WHERE 子句中使用不可索引的比较运算符,除了针对最多 64 行的枚举表本身。在您的分销商中搜索运送到印第安纳州和加利福尼亚州的每个人仍然可以使用相等比较和索引。

现在您需要添加对美国领土、武装部队邮寄代码和加拿大各省的支持,并以向后兼容的方式执行此操作。没有将列表减少到 < 64 个条目,企业真的希望避免将老派州与其他地区和部门分开。

你是做什么的?

创意答案值得赞赏,但这里真正的挑战是:有没有一种方法可以强制对无符号 64 位值起作用的相同按位数学运算对有符号值起作用,同时使用负空间超过 64 个可能的位,在 C# 和 SQL (2008) 中?如果重要的话,该标志是模拟的,而不是“真实”标志,因此从技术上讲,这对于具有 [Flags] 属性的 CLR 枚举没有必要。

最佳答案

您不能在 64 位值上超过 64 位,甚至不能使用“负空间”。如果你有 64 位,你就有 64 位。您可以使用 Guid 获得 128 位,这将暂时解决问题,但最终您将需要添加额外的字段。

关于c# - 使用 64 位有符号值在 SQL 和 C# 中模拟 128 位无符号整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1732780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com