Nhibernate实现combguid

/// <summary>
/// Generate a new <see cref="Guid"/> using the comb algorithm.
/// </summary>
private Guid GenerateComb()
{
byte[ ] guidArray = Guid.NewGuid().ToByteArray(); DateTime baseDate = new DateTime( , , );
DateTime now = DateTime.Now; // Get the days and milliseconds which will be used to build
//the byte string
TimeSpan days = new TimeSpan( now.Ticks - baseDate.Ticks );
TimeSpan msecs = now.TimeOfDay; // Convert to a byte array
// Note that SQL Server is accurate to 1/300th of a
// millisecond so we divide by 3.333333
byte[ ] daysArray = BitConverter.GetBytes( days.Days );
byte[ ] msecsArray = BitConverter.GetBytes( ( long )
( msecs.TotalMilliseconds/3.333333 ) ); // Reverse the bytes to match SQL Servers ordering
Array.Reverse( daysArray );
Array.Reverse( msecsArray ); // Copy the bytes into the guid
Array.Copy( daysArray, daysArray.Length - , guidArray,
guidArray.Length - , );
Array.Copy( msecsArray, msecsArray.Length - , guidArray,
guidArray.Length - , ); return new Guid( guidArray );
}

需要在SQL中生成Combguid,没有找到代码。翻了一下

CREATE FUNCTION [dbo].[GenerateCombGuid]()
RETURNS VARCHAR(36)
AS
BEGIN
DECLARE @guidArray AS VARCHAR(36) = (SELECT TOP 1 id FROM GetGuid)
DECLARE @basedate AS DATETIME = '1900-01-01'
DECLARE @basedateTicket AS BIGINT = 599266080000000000
DECLARE @now AS DATETIME = GETDATE() DECLARE @tmp_days_from_0001_to_1900 AS BIGINT = 693595;
DECLARE @tmp_ticks_per_millisecond AS BIGINT = 10000;
DECLARE @tmp_ticks_per_day AS BIGINT = 24 * 3600 * 1000
* @tmp_ticks_per_millisecond;
DECLARE @tmp_millisecond_of_time AS INT= DATEPART(MILLISECOND, @now)
+ ( DATEPART(SECOND, @now) ) * 1000 + ( DATEPART(MINUTE, @now) )
* 60000 + ( DATEPART(HOUR, @now) ) * 3600000;
DECLARE @ticks_of_days AS BIGINT = CAST(@tmp_days_from_0001_to_1900
+ DATEDIFF(DAY, 0, @now) AS BIGINT) * @tmp_ticks_per_day;
DECLARE @ticks_of_time AS BIGINT = @tmp_millisecond_of_time
* @tmp_ticks_per_millisecond;
DECLARE @nowTicket AS BIGINT = @ticks_of_days + @ticks_of_time; DECLARE @days AS INT = ( @nowTicket - @basedateTicket ) / 1000 / 60000 / 60 / 24 / 10
DECLARE @times AS INT = ( @nowTicket - @basedateTicket ) / 1000 / 60000 DECLARE @daysArray AS VARBINARY(2) = CONVERT(VARBINARY(2), @days);
DECLARE @msecsArray AS VARBINARY(4) = CONVERT(VARBINARY(4), CAST(@tmp_millisecond_of_time
/ 3.333333 AS BIGINT)); return SUBSTRING(@guidArray, 1, 23) + '-'
+ CONVERT(VARCHAR(4), @daysArray, 2)
+ CONVERT(VARCHAR(8), @msecsArray, 2)
END GO

Sqlserver Function中无法直接使用NEWID(),再建立一个View

Create View GetGuid
as
SELECT newid() id
GO

生成100w条记录用时,还行

SELECT NEWID() FROM Nums  --4s
SELECT dbo.[GenerateCombGuid]() FROM Nums --6s

TSQL生成Combguid的更多相关文章

  1. 怎么使用T-sql生成两位字母

    SQL code select char(cast(rand()*25 as int)+97)+char(cast(rand()*25             as int)+97) select 两 ...

  2. Oracle 11g数据库详解(2)

    FAILED_LOGIN_ATTEMPTS 用于指定连续登陆失败的最大次数 达到最大次数后,用户会被锁定,登陆时提示ORA-28000 UNLIMITED为不限制 精确无误差 是 实时 PASSWOR ...

  3. T-SQL Recipes之生成动态列表数据

    Problem 首先什么是动态列表?举个示例,假设你想输出以逗号分隔的IDs,如: 1,45,67,199,298 Solution 生成动态列表数据在我们生活场景中很常见,比如在 Dynamic P ...

  4. T-SQL 运行时生成语句

    运行时生成语句 1.用EXECUTE执行动态命令 EXECUTE命令可以执行存储过程.函数和动态的字符串命令.注意此语句的作用正如前面在介绍批处理时,如果批中的第一条语句是"EXECUTE存 ...

  5. MSSQL-Scripter,一个新的生成T-SQL脚本的SQL Server命令行工具

    这里向大家介绍一个新的生成T-SQL脚本的SQL Server命令行工具:mssql-scripter.它支持在SQL Server.Azure SQL DB以及Azure SQL DW中为数据库生成 ...

  6. T-SQL 之 运行时生成语句

    一.用EXECUTE执行动态命令 EXECUTE命令可以执行存储过程.函数和动态的字符串命令.注意此语句的作用正如前面在介绍批处理时,如果批中的第一条语句是"EXECUTE Proc_nam ...

  7. SQLSERVER2000使用TSQL将数据导入ACCESS并压缩生成rar

    查询分析器操作ACCESS数据表数据 (1)查询:select top 10 * from OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'C:\Documents an ...

  8. sql2012包含数据库,快速生成用户tsql脚本

    今天太忙(下班时,发现一个考试网站的不算BUG的BUG,这个BUG刚好能让我找到想要的数据,现在正辛苦的编码中...) 不多说,今天的技术文章,简单一点,帖一段昨天写的SQL代码 用于SQL2012中 ...

  9. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

随机推荐

  1. NSURLSession与AFNetworking3.0

    下面是用GET方式请求一个页面数据的示例: AFNetworking 2.x NSString *siteUrl = @"http://webinar.ofweek.com/readDemo ...

  2. asp.net MVC之 自定义过滤器(Filter)

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...

  3. 实现快速迭代的引擎设计 - Capcom RE Engine的架构与实现

    [译]实现快速迭代的引擎设计 - Capcom RE Engine的架构与实现 ken hu· 6 天前 原文(日文):ラピッドイテレーションを実現するゲームエンジンの設計 CEDEC2016上的一个 ...

  4. UIWebView 操作

    网络开发中,当公司已经使用 HTML5 技术实现同时适应 Android 和 iOS 等多个平台的网页时,这时往往需要我们 iOS 平台能够嵌入网页并进行各种交互,那我们应该怎么做来实现这种需求呢? ...

  5. Codeforces Round #237 (Div. 2) C. Restore Graph(水构造)

    题目大意 一个含有 n 个顶点的无向图,顶点编号为 1~n.给出一个距离数组:d[i] 表示顶点 i 距离图中某个定点的最短距离.这个图有个限制:每个点的度不能超过 k 现在,请构造一个这样的无向图, ...

  6. mono+jexus 验证码不显示:System.Drawing

    System.ArgumentException The requested FontFamily could not be found [GDI+ status: FontFamilyNotFoun ...

  7. C# 通过WebService方式 IIS发布网站 上传文件到服务器

    应用场景:要将本地的文件 上传到服务器的虚拟机上 网络环境:公司局域网(如下图中第二种) 开发环境:VS2010 服务器环境:WinServer2008    虚拟机环境:WinServer2008 ...

  8. MyBatis知多少(5)业务对象模型

    几乎所有结构良好的软件都使用了分层设计.分层设计将一个应用程序根据技术职能分为几 个内聚的部分,从而将某种特定技术或接口的实现细节与其他部分分离开来.分层设计可以用任 何一种强壮的编程语言来实现.图1 ...

  9. eclipse luna 安装 Hadoop 1.2.1 eclipse-plugin

    博主最近学习Hadoop 1.2.1,从多个搜索引擎的搜索结果当中汇合得出本文Hadoop 1.2.1 Eclipse-plugin安装过程介绍,如果你是从网上下载hadoop-eclipse-plu ...

  10. 使用 GistBox 轻松组织和管理你的代码片段

    GistBox 用简便的方式来组织和管理代码片段.你的代码会保存到云端进行备份,再也不用担心迷失在杂乱的代码片段中.GistBox 是建立在标准的 HTML5 技术基础上.在旅途中或在办公室,你都可以 ...