【原创】SQLSERVER 通过 newsequentialid() 获取有序Guid 的注意事项
SQL SERVER 2005版本开始,支持获取有序Guid,函数为:newsequentialid(),使用该函数注意事项:
1、表存在对应类型:uniqueidentifier,可以设置 default 为:newsequentialid() 来自动生成有序Guid
2、字段类型为:uniqueidentifier时,值只能是36位有效格式的字符串,不能为其他格式或空的字符串,而且 SQL语句中不能这样比较: FieldName = '',需要转换类型才可以,如:cast(FieldName as char(36)) = ''
3、父子表建立关系时,如果父表字段是 uniqueidentifier类型,则子表字段也必须是uniqueidentifier类型,如果子表该字段允许空,则只能设置为允许NULL,内容不能是空字符串。
即:uniqueidentifier类型的字段作为主键时,如果是另一个表的副键,则另一个表的副键也必须是uniqueidentifier类型。
4、SQLSERVER 2008R2 SP3 版本 SMSS 界面中创建关系并保存时,uniqueidentifier类型字段如果存在默认值 :newsequentialid(),会提示错误,且无法保存。
(关于 newsequentialid() 函数更多特点,网上资料很多,这里不再重复赘述)
综合上述分析,最终建议:
1、创建有序Guid字段,可以设置 类型为 char(36)
2,然后通过存储过程或直接代码的形式获取 有序Guid:
alter procedure [dbo].[pro_uuid] @Result char(36) output as begin declare @uuid table (cid uniqueidentifier default newsequentialid(),name char(1)) insert into @uuid(name) values('') select @Result = cid from @uuid end -- 调用: declare @uuid char(36) exec dbo.pro_uuid @uuid output select @uuid
以上分析环境为:SQLSERVER 2008R2 SP3 版本,更高版本未作测试。
最后修正:只有 uniqueidentifier类型 才是有序的,如果是 char(36) ,间断操作,查询时发现不是有序。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤