一、sql新增后返回主键

1,返回自增的主键:

 INSERT INTO 表名
(字段名1,字段名2,字段名3,…)
VALUES
(值1,值2,值3,…)
SELECT @@IDENTITY

2,返回主键也可以返回别的字段看需要:inserted.id这里的id可以是其他字段就是一个字段名,比如还可以返回inserted.name

 INSERT INTO 表名
(字段名1,…)
OUTPUT inserted.id
VALUES
(值1,…)

二、sql 使用 FOR XML PATH实现字符串拼接

sql中经常需要把多个行数据合成一行下面是利用 FOR XML PATH来实现的简单介绍。

1,把图一的转换为图二:

SELECT articleID,
(SELECT CONVERT(varchar(10),tagID)+',' FROM articleTag_tb
FOR XML PATH('')) AS tagID FROM articleTag_tb GROUP BY articleID

以上是一个表的,下面看看多表关联的做法,其实是一样的只是连接表查询
这是一个文章对应多个标签的例子三张表:

CREATE TABLE [dbo].[article_tb](
[articleID] [int] NULL,
[articleName] [nvarchar](50) NULL
) CREATE TABLE [dbo].[articleTag_tb](
[articleID] [int] NULL,
[tagID] [int] NULL
) CREATE TABLE [dbo].[tag_tb](
[tagID] [int] NULL,
[tagName] [nvarchar](50) NULL
)

实现sql语句:

SELECT articleName,
(SELECT tagName+','FROM
(SELECT A.articleName,t.tagName FROM article_tb A
LEFT JOIN articleTag_tb AT ON AT.articleID=A.articleID
LEFT JOIN tag_tb T ON AT.tagID=T.tagID) temp
WHERE temp.articleName=TT.articleName
FOR XML PATH('')) AS tagName FROM article_tb TT

解释:
先把三个表做连接查询查找需要的字段,再用FOR XML PATH 自连接拼接字符串

三表连接查询结果为:              使用FOR XML PATH拼接后结果:

 

三、sql如果存在就修改不存在就新增

IF EXISTS (SELECT 1 FROM 表名 WHERE 条件)
UPDATE 表名 SET 字段=值 WHERE 条件
ELSE
INSERT INTO 表名(字段) VALUES(值)

真实使用举例:

if exists(select 1 from [UserRules] where UserID=@UserID)
update [UserRules] set [AttendanceRulesID]=@AttendanceRulesID where UserID=@UserID
else
insert into [UserRules] (UserID,AttendanceRulesID) Values(@UserID,@AttendanceRulesID)

二、sql新增后返回主键|sql 使用 FOR XML PATH实现字符串拼接|sql如果存在就修改不存在就新增的更多相关文章

  1. sql新增后返回主键

    对于刚学的人来说有点帮助,新增后返回主键有两种方法: 1,返回自增的主键: INSERT INTO 表名 (字段名1,字段名2,字段名3,…) VALUES (值1,值2,值3,…) SELECT @ ...

  2. Mybatis之MySql批量insert后返回主键

    需求:使用批量插入后,需要insert之后的每一条记录的ID 注意:Mybatis3.3.1的版本以后支持批量插入后返回主键ID 示例: domin.java: public class User { ...

  3. Java MyBatis insert数据库数据后返回主键

    <selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER&quo ...

  4. (转)Mybatis insert后返回主键给实体对象(Mysql数据库)

    <insert id="insert" parameterType="com.zqgame.game.website.models.Team"> & ...

  5. Laravel 5 插入数据后返回主键ID

    方法一: $info = DB::table('表名')->insertGetId(['imgName' => $fileName]);//图片名入库后返回添加数据行的主键ID 方法二:( ...

  6. mybatis insert后返回主键ID

    需求: mybatis  在添加记录时需要获取到记录主键id id=0 无法获取主键id的值 在插入方法中添加如下属性和相应的值 <insert useGeneratedKeys="t ...

  7. sql 使用 FOR XML PATH实现字符串拼接

    sql中经常需要把多个行数据合成一行下面是利用 FOR XML PATH来实现的简单介绍. 1,把图一的转换为图二: SELECT articleID, (),tagID)+',' FROM arti ...

  8. sql中的for xml path() 实现字符串拼接

       通常我们需要在sql中拼接字符串   ,可以用for xml path() 来进行拼接,如下实例. 同时未去掉最后一个逗号可以用LEFT函数来实现.     ) AS UserName  FRO ...

  9. Mybatis插入数据后返回主键id

    有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...

随机推荐

  1. 嵌入式系统的性能测试(1) – lmbench篇

    要评价一个系统的性能,通常有不同的指标,相应的会有不同的测试方法和测试工具.既有比较成熟的商业测试软件,也有许多优秀的开源工具来完成这个任务.本文简要介绍如何使用lmbench来完成系统综合性能测试. ...

  2. .net core 控制台程序生成EXE

    在项目上右键编辑xxx.csproj,添加一行 <RuntimeIdentifier>win7-x64</RuntimeIdentifier>

  3. 十分钟理解Redux核心思想,过目不忘。

    白话Redux工作原理.浅显易懂. 如有纰漏或疑问,欢迎交流. Redux 约法三章 唯一数据源(state) 虽然redux中的state与react没有联系,但可以简单理解为react组件中的th ...

  4. python基础:7.求结果

    求结果: v1 = 1 or 3
 v2 = 1 and 3
 v3 = 0 and 2 and 1 v4 = 0 and 2 or 1 v5 = 0 and 2 or 1 or 4 v6 = 0 o ...

  5. css3的三大特性以及移动端说明

    css3的三大特性: 一.层叠性 所谓层叠性是指多种CSS样式的叠加. 是浏览器处理冲突的一个能力,如果一个属性通过两个相同选择器设置到同一个元素上,那么这个时候一个属性就会将另一个属性层叠掉 比如先 ...

  6. 4412 GPIO初始化

    一.GPIO的初始化 • 在内核源码目录下使用命令“ls drivers/gpio/*.o”,可以看到“gpioexynos4”被编译进了内核.通过搜索*.o文件,可以知道内核编译内哪些文件.针对的看 ...

  7. redis哨兵-5

    #地址: https://www.cnblogs.com/PatrickLiu/p/8444546.html #常用架构 redis1主1从+3哨兵 实现redis高可用 #redis主从 ##### ...

  8. [CSP-S模拟测试]:party?(霍尔定理+最小割+树链剖分)

    题目描述 $Treeland$国有$n$座城市,其中$1$号城市是首都,这些城市被一些单向高铁线路相连,对于城市$i\neq 1$,有一条线路从$i$到$p_i(p_i<i)$.每条线路都是一样 ...

  9. codeforces 557E Ann and Half-Palindrome

    题意简述 给定一个字符串(长度不超过5000 且只包含a.b)求满足如下所示的半回文子串中字典序第k大的子串 ti = t|t| - i + 1(|t|为字符串长度)   -------------- ...

  10. 改MYSQL数据库时遇的错

    //http://www.dongcoder.com/detail-1103326.html