1. 程式人生 > >利用SQL表生成按日期序列的唯一ID

利用SQL表生成按日期序列的唯一ID

1. 建立一個表,用於存現在最大的ID

SELECT [ID],[PreFix],[Code] FROM [DocumentNO]

2. 增加SP,利用鎖表,生成相應的ID

Create PROCEDURE [dbo].[GeneralDocumentNo]
(
 @preFix nvarchar(256),
 @outCode varchar(256) output
)
AS
BEGIN
-- =============================================
-- Author:  xiefs
-- Create date: 2013-12-18
-- Description: 生成系統唯一序列號 -- ============================================= Declare @docNo nvarchar(256), @month varchar(10), @day varchar(10), @no varchar(10), @num int , @lenNum int, @sql nvarchar(4000), @maxCode varchar(256), @tableName
varchar(256) SET NOCOUNT ON; set @tableName='DocumentNo'; set @month=CAST(month(getdate())as varchar); set @day = CAST(day(getdate())as varchar); if(LEN(@month)=1) set @month='0'+@month; if(LEN(@day)=1) set @day='0'+@day; set @docNo = @preFix+cast(YEAR(getdate()) as varchar)+ @month
+@day; set @sql =N'select top 1 @p=code from '+@tableName +' WITH(holdlock,tablockx) where CHARINDEX('''+@docNo+''',code)=1 order by id desc'; EXEC sp_executesql @sql,N'@p varchar(256) output',@p=@maxCode output ; if(@maxCode is null) begin set @no='1'; end; else begin set @no=CAST((CAST(SUBSTRING(@maxCode,len(@docNo)+1,LEN(@maxCode)) as int)+1) as varchar); end; set @lennum = LEN(@no); set @num =4; while @lenNum<4 begin set @lenNum=@lenNum+1; set @no='0'+@no; end insert into documentno(Prefix,Code) values(@preFix,@docNo+@no); --select @[email protected]; set @outCode=@docNo+@no; END

相關推薦

利用SQL生成日期序列唯一ID

1. 建立一個表,用於存現在最大的ID SELECT [ID],[PreFix],[Code] FROM [DocumentNO] 2. 增加SP,利用鎖表,生成相應的ID Create PROCEDURE [dbo].[GeneralDocumentNo] ( @preFix nvarcha

sql中自增序列的新增,刪除,與修改

直接 src tar 綁定 後綁定 style com 屬性 新的 首先我們應該對Sequences,有個基本的概念: 主要是用來唯一標識,這樣方便查詢整條數據信息,主要的屬性有:自增量,最大值,最小值,初始值,所有者,自身名稱,關聯表名 1、重新設置序列開始的數字sql,

MYSQL之分割槽----日期分割槽

錯誤的按日期分割槽例子 最直觀的方法,就是直接用年月日這種日期格式來進行常規的分割槽: PLAIN TEXT CODE:mysql> create table rms (d date) -> partition by range (d) -&

Zookeeper命名服務——生成分散式有序且唯一id

  生成分散式有序且唯一id的方法有很多種,使用zookeeper是比較簡單的一種方法,只是生成的速度不高,這裡只是一個藉助zk的版本號生成分散式唯一且有序id的例子。   ZkIdGenerator.java: package cc11001100.zookeeper.uniqId

利用SQL語句查詢數據庫中所有

結果集 sel clas 使用 創建 ref 註意 目錄 tails Oracle: SELECT * FROM ALL_TABLES;--系統裏有權限的表 SELECT * FROM DBA_TABLES;-- 系統表 SELECT * FROM USER_TA

簡單日期查詢mysql某張中的記錄數

unsigned 計劃 表結構 記錄 create sig 站點 signed using 測試表表結構:mysql> show create table dr_stats\G 1. row Table: dr_stats Create Table:

SQL Server 生成時間序列

WITH DateSequence AS ( SELECT CONVERT(DATETIME,'20150101') AS DateNum UNION ALL SELECT DateNum+1 FROM DateSequence WHERE Da

PHP生成日期序列

<?php $d0 = '2010-04-20'; $d1 = '2010-04-23'; $_time = range(strtotime($d0), strtotime($d1), 24*60*60); $_time = array_map(create_function('$v

在Oracle、MySQL中執行sql指令碼生成hive建語句

python3指令碼: #mysql for i in range(len(table_name)): sql1 = """SELECT CONCAT('create table ','%s','(') UNION ALL SELECT CONCAT(

SQL Server 根據樹狀結構生成以/號分割的路由字串

很多情況下,我們有必要把樹形結構進行資料梳理。比如,要方便的過濾出一個父節點下的所有子節點等等。。。 這個時候,我們可以生成一個路徑表字符串,在應用時只需要對該字串進行索引即可達成目的。 目標:按圖示的部門結構樹,獲取本身的完整路徑字串。比如,前道工序部門,其部門程式碼為PDTE,上級部門為PD生產部,按

資料庫SQL實踐49:針對庫中的所有生成select count(*)對應的SQL語句

思路: 列出資料庫中所有表名: select name from sqlite_master where type='table' 用||連線 "select count(*) from" || name || ";"從而實現連線 select "select count(*)

日期建立資料庫--美美美美菜菜菜菜

<?php class TOrderBaseModel extends DbModel { const BASE_TABLE_NAME = 't_order_base'; private static $db_connection; private static

oracle日期分割槽建立、新增、修改、刪除

Oracle11G分割槽表   當表中的資料量不斷增大,查詢資料的速度就會變慢,應用程式的效能就會下降,這時就應該考慮對錶進行分割槽。表進行分割槽後,邏輯上表仍然是一張完整的表,只是將表中的資料在物理上存放到多個表空間(物理檔案上),這樣查詢資料時,不至於每次都掃描整張表。 作用:   Oracle的表

POI 將日期的資料彙總到一個excel中 大資料量

一. 簡介            現在有按時間分的使用者表,要在每月一號將這些表的資料彙總到一個excel中。每張表的資料量很大。            昨天通宵搞得,只為紀念,方便以後遇見同樣的需求做參考。            之前是想著每天匯出一個excel, 然

Excel[SQL]實現日期累加

參考程式碼1:根據a.日期,和b表日期比較,遍歷(逐條資料查詢b.日期)只要是小於等於a.日期的收入資料,就累加求和。 select a.日期, ( select sum(b.賣茶葉蛋收入) as 累加 from [sheet1$a1:b13] b wher

Mysql --針對庫中的所有生成select count(*)對應的SQL語句

CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT N

PostgreSQL中使用動態SQL-實現自動時間建立分割槽

PostgreSQL中通過繼承,可以支援基本的表分割槽功能,比如按時間,每月建立一個表分割槽,資料記錄到對應分割槽中。按照官方文件的操作,建立子表和index、修改trigger等工作都必須DBA定期去手動執行,不能實現自動化,非常不方便。 嘗試著通過在plpgsql程式碼

各種日期、時間段統計SQL語句

--前一日  select * from 表名 where  datediff(d,cast(日期  as  datetime),getdate())=1  --上週 select *

powerdesigner15 生成sql 名帶引號的解決辦法

powerdesigner15 連線 oracle11g 時,我建立了一張表 aaa 生成的sql語句為: drop table “aaa” cascade constraints; create table “aaa” ( “id”

SQL語句生成結構對應的javabean及mybatis的resultMap

命令列連線MySQL資料庫 mysql --default-character-set=[編碼] -h [IP] -P[埠(沒有空格)] -u [使用者名稱] -D [資料庫名] -p[密碼(沒有空格)]例如 mysql --default-character-se