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. cocos2dx在ubuntu下配置声音引擎

    声音引擎库和cocos2dx的库是分开的我们要使用的时候不得不重新修改一下makefile,首先我们要找到声音引擎库的位置,在cocos2dx的 根目录下有一个lib文件,看一下是否存在libcoco ...

  2. 谈一下OOP的乱用现象

    很久很久以前写了两篇设计模式乱用的文章,最近心血来潮,突然想写篇OOP乱用. 最近在移植一个旧项目,接手过程很多嘈想吐,开一篇谈一下OOP的乱用. 大多数公司用MVC是为了解耦合,但是这套代码的MVC ...

  3. 活学活用,webapi HTTPBasicAuthorize搭建小型云应用的实践

    HTTP使用BASIC认证,WebAPI使用[HTTPBasicAuthorize]标记控制器就是使用了BASIC认证. BASIC认证的缺点HTTP基本认证的目标是提供简单的用户验证功能,其认证过程 ...

  4. 【MVC 过滤器的应用】ASP.NET MVC 如何统计 Action 方法的执行时间

    代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; u ...

  5. Web Component--01. 简介

    Web Components 是什么? Web Components是W3C定义的新标准,它给了前端开发者扩展浏览器标签的能力,可以自由的定制组件,更好的进行模块化开发,彻底解放了前端开发者的生产力. ...

  6. NavMesh名字、层索引、层值之间的转换

    // Nav层名字-->层的值,1.2.4.8.16 public static int AgentLayerNameToValue(string name) { int idx = NavMe ...

  7. 数据可视化(4)--jqplot

    本来打算继续研究Google Charts,但上头下了指示让看jqplot,无奈,只好先将Google Charts放一放,不过真心觉得Google Charts不错,现在先开始jqplot. jqP ...

  8. [Matlab] Galois Field

    1. gf(M)用来把M转换到伽罗华域 2. gf(M.x)用来把M转换到实数域

  9. 一个关于explain出来为all的说明及优化

    explain sql语句一个语句,得到如下结果,为什么已经创建了t_bill_invests.bid_id的索引,但却没有显示using index,而是显示all扫描方式呢,原来这还与select ...

  10. java:[1,1] 需要class, interface或enum

    状态: cmd编译.java文件时报异常:java:[1,1] 需要class, interface或enum异常原因: 主要原因是java文件的编码问题. 在中文操作系统中,使用一贯的"j ...