SQL SERVER 2005版本开始,支持获取有序Guid,函数为:newsequentialid(),使用该函数注意事项:
1、表存在对应类型:uniqueidentifier,可以设置 default 为:newsequentialid() 来自动生成有序Guid
2、字段类型为:uniqueidentifier时,值只能是36位有效格式的字符串,不能为其他格式或空的字符串,而且 SQL语句中不能使用 FieldName = '',这样的比较。
3、父子表建立关系时,如果父表字段是 uniqueidentifier类型,则子表字段也必须是uniqueidentifier类型。
即: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,uuid,newsequentialid,SQLSERVER,36,char,Guid From: https://www.cnblogs.com/reakal/p/17320655.html