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 透视 所谓透视( ...
随机推荐
- [Z] Windows 8/10 audio编程
都是些网上搜到的比较不错的文章.关于这块儿的内容网上帖子不多.出去下面列的最主要的还有参考MSDN. WASAPI使用介绍: https://blogs.windows.com/buildingapp ...
- Asp.net Request方法获取客户端的信息
Response.Write("客户端计算机名:" + Request.UserHostName + "<BR />"); Response.Wri ...
- POJ 1816 Wild Words
Wild Words Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4412 Accepted: 1149 Descri ...
- CSS3实现倒计时
CSS3实现倒计时小程序,界面如下: 代码如下: <style> body,html{ margin:0px; height:100%; } body{background: #000; ...
- [转载]QString 乱谈(3)-Qt5与中文
原文地址http://blog.csdn.net/dbzhang800/article/details/7542672?reload 两个月前,简单写过QTextCodec中的setCodecForT ...
- 深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的
前言 跟我一起顺藤摸瓜剖析 Artech 老师的 MiniMVC 是如何运行的,了解它,我们就大体了解 ASP.NET MVC 是如何运行的了.既然是“顺藤摸瓜”,那我们就按照 ASP.NET 的执行 ...
- ruby -- 问题解决(六)link_to to destroy not working
在Rails的development环境下开发时,使用link_to进行destroy时顺利进行,最近将环境配置成production时,使用link_to,结果not working 代码如下: & ...
- Membership三步曲
http://www.cnblogs.com/jesse2013/p/membership-part1.html http://www.cnblogs.com/jesse2013/p/membersh ...
- DDD:关于模型的合法性,Entity.IsValid()合理吗?
背景 见过很多框架(包括我自己的)都会在实体的定义中包含一个IsValid()方法,用来判断实体的合法性,是否应该这样设计呢?本文就这个问题介绍一点想法,希望大家多批评. 实体能否处于“非法”状态? ...
- wamp2.5虚拟站点建立
1. D:\wamp\bin\apache\Apache2.2.21\conf 目录下打开httpd.conf修改以下几个地方.(软件安装在D盘) (1)178行DocumentRoot " ...