在 MS SQL Server 2008 中创建序列

2024-02-25

我编写了一个程序,可以在其中请求身份证。

有不同类型的身份证(红、蓝、绿)

当提出请求时,程序应该生成标识号。数字(数字范围)取决于所请求的卡。

Red Card: 1 - 50000 
Blue Card: 50001 - 100000 
Green Card: 100001 - 150000

如果我向系统添加新的身份证,那么序列应该自动为新添加的身份证创建新的数字范围。这些数字不应重复出现。一个号码只能使用一次。

我怎样才能做到这一点?有人能帮我吗?


您可以为此使用而不是插入触发器

create table Cards_Types (Color nvarchar(128) primary key, Start int);
create table Cards (ID int primary key, Color nvarchar(128));

insert into Cards_Types
select 'RED', 0 union all
select 'BLUE', 50000 union all
select 'GREEN', 100000;

create trigger utr_Cards_Insert on Cards
instead of insert as
begin
    insert into Cards (id, Color)
    select
        isnull(C.id, CT.Start) + row_number() over(partition by i.Color order by i.id),
        i.Color
    from inserted as i
        left outer join Cards_Types as CT on CT.Color = i.Color
        outer apply (
            select max(id) as id
            from Cards as C
            where C.Color = i.Color
        ) as C
end

sql fiddle demo http://sqlfiddle.com/#!3/18019/1

它允许您一次插入多行:

insert into Cards (Color)
select 'GREEN' union all
select 'GREEN' union all
select 'RED' union all
select 'BLUE'

请注意,您最好在卡片列上建立索引Color, ID.

另请注意,您只能为每种类型插入 50000 条记录。您可以使用不同的种子,例如 1 代表“红色”,2 代表“蓝色”等等,并为 预留位置,例如 100types卡片数量:

create table Cards_Types (Color nvarchar(128) primary key, Start int);
create table Cards (ID int primary key, Color nvarchar(128));

insert into Cards_Types
select 'RED', 1 union all
select 'BLUE', 2 union all
select 'GREEN', 3;

create trigger utr_Cards_Insert on Cards
instead of insert as
begin
    insert into Cards (id, Color)
    select
        isnull(C.id, CT.Start - 100) + row_number() over(partition by i.Color order by i.id) * 100,
        i.Color
    from inserted as i
        left outer join Cards_Types as CT on CT.Color = i.Color
        outer apply (
            select max(id) as id
            from Cards as C
            where C.Color = i.Color
        ) as C
end;

sql fiddle demo http://sqlfiddle.com/#!3/51ad9/1

这样,“红色”的 ID 始终以 1 结尾,“蓝色”的 ID 始终以 2 结尾,依此类推。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MS SQL Server 2008 中创建序列 的相关文章

  • 为什么查询优化器完全忽略索引视图索引?

    SQL 小提琴 http sqlfiddle com 6 d4496 1 http sqlfiddle com 6 d4496 1 数据是为您的实验预先生成的 有一个明显的表格 CREATE TABLE Entity ID int Clas
  • 与 FOREIGN KEY 约束冲突

    我有两张桌子 学术界 CREATE TABLE dbo R ACADEMIE ID ACADEMIE dbo IDENTIFIANT NOT NULL LC ACADEMIE CODE dbo LIBELLE COURT NOT NULL
  • MySQL 中的 UDF 性能

    我注意到 当查询在 SELECT 或 WHERE 子句中调用 UDF 时 MySQL 查询执行时间的性能会呈指数级下降 有问题的 UDF 查询本地表以返回标量值 因此它们不仅执行算术表达式 而且充当相关子查询 我通过简单地删除 UDF 并使
  • SqlException超时未达到

    我们的服务器有时会抛出这个众所周知的异常 超时已过 操作完成之前超时时间已过 或者服务器未响应 当服务器处理大请求时 这种情况会在压力下发生 我做了一些研究 发现我可以改变连接字符串连接超时设置和 或SqlCommand 超时数据读取器属性
  • 使用 Powershell SQL 将数据提取到 Excel

    我想使用 powershell 将数据从 SQL Server 提取到新的 excel 文件 对于小型数据集 我的代码可以工作 但某些表的行数超过 100 000 行 这将需要很长时间 我不在 SQl 服务器中使用该实用程序的原因是因为我想
  • 如何对 SQL Server Express 进行实时更改

    我一直在使用 VS studio 开发一个 ASP NET Web 应用程序 我正在使用 SQL Server Express 在开发过程中 我一直在我的服务器上测试我的网络应用程序 每次我需要更新数据库时 我都会简单地删除旧数据库 位于我
  • 在 Doctrine DQL 中选择 count() ,并使用左连接多对多单向关系,其中用户没有关系特定组

    情况 我尝试在 DQL 中为不属于特定组的用户选择 count 标准ManyToMany之间的单向关系User and Group实体来自FOSUserBundle and SonataUserBundle 系统 Symfony 2 5 D
  • SSRS仅显示第一行

    我在 SSRS 中有一个非常基本的报告 显示数据网格 查询正确返回多行 但报告仅显示第一行 查询就像 SELECT FROM 一样简单 我没有任何特殊的格式 并且 tablix 位于报告的详细信息部分 而不是意外的页眉或页脚 我还可以检查什
  • 多级排序

    我有一个表 其中包含一些记录 其中包含名称 评级等字段 我首先想要根据评级将结果限制为 20 进行排序 然后在此结果集上想要进一步应用基于名称的排序 我知道要排序我们需要使用像这样的查询 Select from table order by
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • 在 Navicat Premium 中连接到 LocalDB 服务器

    Recently I installed LocalDb Serer on my laptop I am trying to establish a connection between Navicat and LocalDB server
  • 仅基于月份和年份的 SQL Server 日期比较

    我无法确定仅根据月份和年份比较 SQL 中的日期的最佳方法 我们根据日期进行计算 由于计费是按月进行的 因此该月的日期会造成更多障碍 例如 DECLARE date1 DATETIME CAST 6 15 2014 AS DATETIME
  • 尝试使用 sql 获取单行结果? [复制]

    这个问题在这里已经有答案了 我正在尝试显示所有员工 ID 我需要这样的结果 emp id 10 11 12 13 14 15 当尝试时 SELECT LISTAGG emp id WITHIN GROUP ORDER BY emp id A
  • SSIS 将字符转换为布尔值/位

    我有一个SSIS包来加载数据 您可能还记得 当我尝试将数据文件中的标志作为位标志加载到 SQL Server 中时 这些标志作为 Y N char 1 存在 我将数据文件中的列指定为String DT STR 我有一个数据转换任务 根据以下
  • UseRowNumberForPaging 不是有效的

    我在用着 Microsoft EntityFrameworkCore SqlServer 1 0 0 rc2 final with SQL 2008根据谷歌上找到的一些结果 我只需添加选项 UseRowNmberForPaging 当创建一
  • 数据库设计1对1关系

    我的数据库设计不正确 我应该在开发过程中解决这个问题吗 假定 user 表与 userprofile 表具有 1 1 关系 然而 实际设计中 用户 表与 用户配置文件 表具有 1 关系 一切正常 但无论如何应该修复它吗 做一件事 User
  • 如何删除实体框架6中的多对多关系

    如果将项目连接为多对多关系 则从数据库中删除项目时会出现问题 我的数据库看起来像 Project lt JobInProject gt Job ProjectID JobInProjectID JobID ProjectID JobID 主
  • Access 2013 SQL 中的转换和透视

    如何使用 TRANSFORM 和 PIVOT 函数从第一个表获取第二个表 TABLE 01 Config ID ConfigField ConfigValue 11 Name Basic 11 Version 1 01 11 Owner J
  • 使用 MVC5、Ajax、C# 和 MSSQL Server 级联 DropdownList

    我对来自 Windows 窗体和三层架构的 MVC 非常陌生 我试图找出使用从数据库填充的级联下拉列表 DDL 我使用 MS SQL Server 2012 VS 2013 目前我正在研究用户调查问卷 用户可以从 DDL 的多个答案中进行选
  • 如何限制mySQL中的搜索和替换字符串

    我用它来搜索和替换 mySQL 中的字符串 UPDATE products SET prodname REPLACE prodname S S 这些产品包含诸如 TYLENOL TABS 100 S 之类的字符串 我想将其转换为 TYLEN

随机推荐

  • Python 决策树 GraphViz

    我正在尝试使用 scikit learn 实现决策树 然后使用 Graphviz 可视化该树 我认为这是可视化 DT 的标准选择 我正在使用 PyCharm anaconda Python 2 7 和 OS X El Capitan 据我所
  • 如何使用GWT的SimpleEventBus或EventBus?

    我正在开发一些简单的绘图软件 需要在 swing 和 gwt 中实现 在 gwt 方面 我将使用 gwt g2d 作为画布 我希望在这两种实现中使用事件总线来简化一些软件 我的理解是它应该是这样的 实例化EventBus 实例化父控件 接收
  • 在C中提取两个特定字符串之间的字符串

    如何提取两个指定字符串之间的字符串 例如 有没有一种简单的方法可以使用它strtok 或者更简单的东西 编辑 两个指定的字符串是提取的字符串是Extract this 使用搜索第一个子字符串strstr 如果找到 则保存子字符串的数组索引
  • 取消/中止/中断 spring-android Resttemplate 请求

    我在一个专门执行 spring android 请求的线程中使用 spring android 我无法中止从 spring android 发起的请求 例如 getForObject 我尝试过了 到达底层输入流关闭但它完全包裹在spring
  • less.js 惰性工作表加载

    我想知道是否有办法加载单个less https github com cloudhead less js页面加载后的某个时间 这个问题 https stackoverflow com questions 3175013 load less
  • F# 运算符重载奇怪的行为

    假设由于某种奇怪的原因我想要这个功能 let str string 42 所以我可以做这样的事情并得到 42 结果 test val it int 42 这很好 但现在当我这样做时 let a 100 a I get error FS000
  • PHP 中的 substr_replace 编码

    我想写入一个文本文件 当我使用子字符串替换 https www php net manual en function substr replace php在 PHP 中 编码发生变化 它无法正确打印希腊字符 如果我不这样做 一切都很好 我怎
  • 如何检索 WordPress 页面的同级页面列表?

    我正在尝试在 WordPress 中创建同级页面 不是帖子 列表来填充页面的侧边栏 我成功编写的代码返回页面父级的标题 据我了解 您需要页面的 id 而不是标题 来检索页面的同级页面 通过wp 列表 页面 http codex wordpr
  • 如何防止使用 git hook 提交文件 (.json)?

    如何防止使用 git hook 提交文件 json 我有一个 json 文件仍在服务器上 所以我不能使用 gitignore 但现在我不想允许任何人更改此文件 提交它 因为它会破坏某些内容 我想使用本地钩子 我怎样才能获得提交中的特殊文件
  • 从今天开始在 Groovy 中计算年龄

    试图根据某人的生日来推测他的年龄 以下代码给出了天数 def now new Date def dob new Date 08 21 1982 println now dob 我们可以除以 365 但这并不完全准确 必须有一种简单的方法来做
  • SQL Server 中函数的返回值

    我想得到从今天开始的最后一个星期六 21 天 为了实现这一目标 我编写了如下所示的脚本 但问题是我无法成功从结果中返回值 我想在 SQL Server 中创建这个函数 并在我想要的存储过程中获取这个值 DECLARE StartDate D
  • C/C++/C# 强制窗口位于顶部

    有没有办法强制another窗口位于顶部 Not应用程序的窗口 但是another一 已经在系统上运行 Windows C C C SetWindowPos that window handle HWND TOPMOST 0 0 0 0 S
  • 为什么 HttpUtility 类无法被识别?

    我正在尝试调用静态HttpUtility UrlEncode在我的 VB NET 项目中 但 IDE 无法识别该类 并表示该类尚未声明 我已经导入了命名空间System Net and System Web到项目 我还在文件顶部添加了以下内
  • 一对一关系的数据库设计

    我正在尝试完成项目数据模型的设计 但很难弄清楚该采用哪种方式 我有一个用户表 以及适用于该用户的未确定数量的属性 这些属性几乎在每种情况下都是可选的 因此允许空值 这些属性中的每一个对于用户来说都是一对一的 我应该将它们放在同一个表上 并在
  • 如果变量在线程之间共享,将变量标记为易失性是否有用? [复制]

    这个问题在这里已经有答案了 Notice 显然我没能向这里的每个人清楚地表达我的观点 这令人难以置信的沮丧 我的目标是消除这样的神话volatile实际上是一个空操作 它什么也不做 我并不是想声明它应该被使用 它是必要的 它不是多余的等等
  • 检测设备品牌

    我正在从事网络分析工作 我正在使用 JavaScript 客户端和 NodeJS 服务器端 我知道我们可以找到答案设备类型 https stackoverflow com questions 11381673 javascript solu
  • Komodo Edit 禁用自动完成

    我正在使用 Komodo Edit 8 它的自动完成功能非常烦人 当我打字时 for i 它会自动填充 for i in range code 现在我必须手动删除它才能继续输入 我尝试关闭 启用自动自动完成和键入时触发的调用提示 from
  • 在现有播放器上启用 YouTube API

    我有一个嵌入式 YouTube 视频 我希望应用 YouTube API 我使用 jQuery 添加 url 参数 如下所示 demo http jsfiddle net VVEY9 document ready function var
  • java字符串日期转换

    我想在存储字符串之前将其转换为日期 并且我使用了 SimpleDateFormat format new SimpleDateFormat yyyy mm dd Date returnDate format parse date 当我使用样
  • 在 MS SQL Server 2008 中创建序列

    我编写了一个程序 可以在其中请求身份证 有不同类型的身份证 红 蓝 绿 当提出请求时 程序应该生成标识号 数字 数字范围 取决于所请求的卡 Red Card 1 50000 Blue Card 50001 100000 Green Card