现在有一个需求,插入api调用日志表。然后,发起HTTP请求()请求时,需要带入日志表的id)。

简化无关的添加,SQL Server表格设计如下:

CREATE TABLE mylog (
id INT IDENTITY(1,1) PRIMARY KEY, -- 自增的主键
url NVARCHAR(255), -- 发起的路径和其他字段
flag INT DEFAULT 0, -- 执行状态
fguid NVARCHAR(36) -- 唯一编码
)

原本为用 @@IDENTITY 获取最近插入的记录,然后再发起请求,也没毛病。

INSERT INTO dbo.mylog
( url, flag )
VALUES ( N'请求的路径', -- url - nvarchar(255)
0 -- flag - int
)
DECLARE @id INT = @@IDENTITY -- 获取插入的ID
SELECT @id
-- 根据新增id,执行下一步

获取到了最近新增的日志记录的id。

于是,好些地方都调用这个方法。直到有一天,主管经过。看来我的代码。

主管:“如果在在执行这句话的过程中,其他地方也插入了记录。会怎么样?”

我回想了一下。我还以为它只是我本地的数据库,独属于我的一对一。我没想到他已经走向社会,需要应对繁杂的事务,切换着满足这么多人的需求。我是不是要给他加一个回滚的事务?

……

主管:“这个表,我就是为了解决唯一性的问题,加了一个字段——fguid”。

SQL  SERVER 有一个方法会随机生成唯一标识符——newID() 。我们可以根据唯一查关键字。

DECLARE @fguid NVARCHAR(36) = LOWER(NEWID())
INSERT INTO dbo.mylog
( url, flag, fguid )
VALUES ( N'', -- url - nvarchar(255)
0, -- flag - int
@fguid -- fguid - nvarchar(255)
)
DECLARE @id INT -- 获取插入的ID
SELECT @id = id FROM dbo.mylog WHERE fguid = @fguid
SELECT @id
-- 根据新增id,执行下一步

我:原来如此。学习了,学习了!谢谢。。不过,为什么要加 LOWER() ?

主管: 小写的看着比较舒服。

【SQL Server】获取表格插入的id(二)——newID()的更多相关文章

  1. SQL Server 2008性能故障排查(二)——CPU

    原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...

  2. SQL Server获取指定行的数据

    SQL Server获取指定行(如第二行)的数据   --SQL Server获取指定行(如第二行)的数据-- --法一(对象法)-- select * from ( select * , numbe ...

  3. 09Microsoft SQL Server 表数据插入,更新,删除

    Microsoft SQL Server 表数据插入,更新,删除 向表中插入数据 INSERT INTO insert into tb1 values(0004,'张凤凤') insert into ...

  4. mysql 获取刚插入行id汇总

    mysql 获取刚插入行id汇总 我们在写数据库程序的时候,经常会需要获取某个表中的最大序号数, 一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的.但 ...

  5. SQL Server获取下一个编码字符串的实现方案分割和进位

        我在前一种解决方案SQL Server获取下一个编码字符实现和后一种解决方案SQL Server获取下一个编码字符实现继续重构与增强两篇博文中均提供了一种解决编码的方案,考虑良久对比以上两种方 ...

  6. SQL Server获取下一个编码字符实现继续重构与增强

        我在SQL Server获取下一个编码字符实现的博文中,虽然实现了这个问题,但是感觉维护起来比较麻烦,例如如果调整编码字符串的固定长度,就需要变更三个函数,这样的为何成本确实比较大.面向对象编 ...

  7. SQL SERVER获取数据库文件信息

        MS SQL SERVER 获取当前数据库文件等信息,适用于多个版本: SELECT dbf.file_id AS FileID , dbf.name AS [FileName] , s.fi ...

  8. SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据

    原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Se ...

  9. 常用脚本--SQL Server获取OS日志

    --=================================================== --SQL Server获取OS日志: ), ), ), ) select @start_d ...

  10. SQLServer数据库之SQL Server 获取本周,本月,本年等时间内记录

    本文主要向大家介绍了SQLServer数据库之SQL Server 获取本周,本月,本年等时间内记录,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助. datediff(we ...

随机推荐

  1. (mysql笔记)GROUP_CONCAT() 把多行数据合并

    不合并查询: 合并查询: SELECT GROUP_CONCAT(id) FROM orderinfo WHERE enterpriseid = 2265 AND shopid =0 AND orde ...

  2. CentOS7下MySQL数据的导入和导出

    一.数据导入 (1)进入mysql [root@localhost mysql]# mysql -u root -p (2)转到对应数据库下 mysql> use zenith_star; (3 ...

  3. jekins+svn

    1.jekins安装可以看jekins+shell随笔. 2.安装svn. yum -y install subversion 3.配置相关文件 mkdir   家目录 cd 到家目录修改conf下三 ...

  4. (已解决)用phpstudy8创建个数据库(非root),结果没有访问权限。

    1. 问题 用phpstudy_pro,即最新版本,创建非root用户的数据库,然后后台访问它却提示没有权限. 2. 解决办法 进入系统自带的user表,修改权限.具体操作如下: a. 首先找到自己用 ...

  5. python_lib_x_1000_file_csv.py

    #!/usr/bin/python # -*- coding: UTF-8 -*- from lib_config import * from lib.lib_x_0002_decorator_log ...

  6. pytest-2 之前后置及 conftest.py+fixture+yield实现用例前后置

    pytest测试用例及类级别的前置,可以和unittest一样进行定义,也可以把该前置方法或类定义到conftest.py里,而在需要前置的方法的参数里加上该前置名作为参数: pytest有两种方式来 ...

  7. python 中的lamda 表达式

      #1. print(list(filter(lambda x: x%2,range(10))))    #[1, 3, 5, 7, 9]# 非lamda表示def odd(x): return x ...

  8. QE11 / QE51N 界面太小问题

    修复后界面是,修复前常规页签中的数据只能显示4行,需要的note是 2639352 , SNOTE 进行打补丁就好  note是 2639352

  9. C 标准 C89/C90/C99/C11/C17

    C89/C90 PDF:https://www.yodaiken.com/wp-content/uploads/2021/05/ansi-iso-9899-1990-1.pdf C99 PDF:htt ...

  10. webapi fromurl frombody

    https://blog.csdn.net/QiGary/article/details/113979877 在做后台api接口时,常常涉及到Http方法访问问题,其中最基础也是最核心的就是传参问题. ...