TSQL生成Combguid
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的更多相关文章
- 怎么使用T-sql生成两位字母
SQL code select char(cast(rand()*25 as int)+97)+char(cast(rand()*25 as int)+97) select 两 ...
- Oracle 11g数据库详解(2)
FAILED_LOGIN_ATTEMPTS 用于指定连续登陆失败的最大次数 达到最大次数后,用户会被锁定,登陆时提示ORA-28000 UNLIMITED为不限制 精确无误差 是 实时 PASSWOR ...
- T-SQL Recipes之生成动态列表数据
Problem 首先什么是动态列表?举个示例,假设你想输出以逗号分隔的IDs,如: 1,45,67,199,298 Solution 生成动态列表数据在我们生活场景中很常见,比如在 Dynamic P ...
- T-SQL 运行时生成语句
运行时生成语句 1.用EXECUTE执行动态命令 EXECUTE命令可以执行存储过程.函数和动态的字符串命令.注意此语句的作用正如前面在介绍批处理时,如果批中的第一条语句是"EXECUTE存 ...
- MSSQL-Scripter,一个新的生成T-SQL脚本的SQL Server命令行工具
这里向大家介绍一个新的生成T-SQL脚本的SQL Server命令行工具:mssql-scripter.它支持在SQL Server.Azure SQL DB以及Azure SQL DW中为数据库生成 ...
- T-SQL 之 运行时生成语句
一.用EXECUTE执行动态命令 EXECUTE命令可以执行存储过程.函数和动态的字符串命令.注意此语句的作用正如前面在介绍批处理时,如果批中的第一条语句是"EXECUTE Proc_nam ...
- SQLSERVER2000使用TSQL将数据导入ACCESS并压缩生成rar
查询分析器操作ACCESS数据表数据 (1)查询:select top 10 * from OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'C:\Documents an ...
- sql2012包含数据库,快速生成用户tsql脚本
今天太忙(下班时,发现一个考试网站的不算BUG的BUG,这个BUG刚好能让我找到想要的数据,现在正辛苦的编码中...) 不多说,今天的技术文章,简单一点,帖一段昨天写的SQL代码 用于SQL2012中 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
随机推荐
- 如何在IIS7或IIS7.5中导入导出站点及应用程序池.
为实现负载平衡,我们可能会使用多个WEB服务器,也就会需要给多个IIS配置同样的站点和应用程序池.那么我们需要一个一个的重新建吗?当然不用,我们只需要一些简单的命令就可以在IIS7(Windows S ...
- NSDictionary 的有序性 (by the key in some rule)
NSDictionary 的有序性: (by the key in some rule) NSDictionary*myDictionary =[NSDictionary dictionaryWith ...
- LED子系统剖析
写之前,先看一张图: 上次说了LED驱动程序,Linux自身也携带了LED驱动,且是脱离平台的,即LED子系统.操作起来十分简单.但是它的实质却不是那么容易,研究了一个晚上,终于明白了其中一个文件的功 ...
- Android中使用POI加载与显示word文档
最近打算实现一个功能:在Android中加载显示Word文档,当然这里不是使用外部程序打开.查看一些资料后,打算采用poi实现,确定了以下实现思路: 将ftp中的word文档下载到本地. 调用poi将 ...
- NPM使用详解(下)
NPM使用详解(下) *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...
- jQuery+Ajax滚屏异步加载数据实现(附源码)
一.CSS样式 body { font:12px/1.0em Microsoft Yahei; line-height:1.6em; background:#fff; line-height:1.2e ...
- UWP开发入门(十七)——判断设备类型及响应VirtualKey
蜀黍我做的工作跟IM软件有关,UWP同时会跑在电脑和手机上.电脑和手机的使用习惯不尽一致,通常我倾向于根据窗口尺寸来进行布局的变化,但是特定的操作习惯是依赖于设备类型,而不是屏幕尺寸的,比如聊天窗口的 ...
- C++中的静态绑定和动态绑定
C++在面向对象编程中,存在着静态绑定和动态绑定的定义,本节即是主要讲述这两点区分.我是在一个类的继承体系中分析的,因此下面所说的对象一般就是指一个类的实例.首先我们需要明确几个名词定义: 静态类型: ...
- Java魔法堂:注释和注释模板
一.注释 1. 注释类型 [a]. 单行注释 // 单行注释 String type = "单行注释"; [b]. 多行注释 /* * 多行注释 */ String type ...
- 【转】Python中的GIL、多进程和多线程
转自:http://lesliezhu.github.io/public/2015-04-20-python-multi-process-thread.html 目录 1. GIL(Global In ...