目录

  1. 从表中去除重复行
  2. 逗号分隔字符串转数据表行
  3. 跨DB/Server执行SP[分布式事务]
  4. 在OpenQuery中执行带参数的SQL语句

从表中去除重复行数据

1. 如果有ID字段,就是具有唯一性的字段
 -- group  by  子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。
delete table tableName
where id not in ( select max(id) from table group by col1,col2,col3... )
2. 如果是判断所有字段也可以这样  ,【对于表中的指定的字段的进行检查是否相同】
select   *   into   #temp  from   tablename    group   by   id1,id2,....
delete tablename
insert into table select * from #temp
drop table #temp
3. 首先去重复,再获取N*1条数据插入到临时表中,【对于表中的所有字段的进行检查是否相同】,再将原表的数据删除,然后将临时表的数据插入到原表,最后删除临时表。
select   distinct   *   into   #temp   from   tablename
delete tablename
go
insert tablename select * from #temp
go
drop table #temp
4. 没有ID的情况
select   identity(int,1,1)   as   id,*   into   #temp   from   tabel
delect # where id not in (
select max(id) from # group by col1,col2,col3...)
delect table
inset into table(...)
select ..... from #temp
5. col1+','+col2+','...col5 联合主键
select * from table where col1+','+col2+','...col5 in (
select max(col1+','+col2+','...col5) from table
where having count(*)>1
group by col1,col2,col3,col4
)
-- group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,那么只要col1字段内容相同即表示记录相同。
6. 使用自增列
select   identity(int,1,1)   as   id,*   into   #temp   from   tabel
select * from #temp where id in (
select max(id) from #emp where having count(*)>1 group by col1,col2,col3...)   

逗号分隔字符串转数据表行

1. 使用CHARINDEX和SUBSTRING函数
CREATE FUNCTION dbo.splitstring
(
@stringToSplit VARCHAR(MAX)
)
RETURNS @returnList TABLE ( [Name] [nvarchar](500) )
AS
BEGIN DECLARE @name NVARCHAR(255)
DECLARE @pos INT WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(',', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos - 1) INSERT INTO @returnList
SELECT @name SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos + 1,
LEN(@stringToSplit) - @pos)
END INSERT INTO @returnList
SELECT @stringToSplit RETURN
END
2. 使用XML-Method[SQL Server 2005+]
CREATE FUNCTION [dbo].[ufnGetSplitValues]
(
@StringValues NVARCHAR(4000),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN
(
SELECT LTRIM(RTRIM(Split.a.value('.', 'NVARCHAR(100)'))) 'Value'
FROM
(
SELECT CAST ('<M>' + REPLACE(@StringValues, @Delimiter, '</M><M>') + '</M>' AS XML) AS Data
) AS A
CROSS APPLY Data.nodes ('/M') AS Split(a)
)
GO
3. STRING_SPLIT()函数[SQL Server 2016 +]
SELECT * FROM STRING_SPLIT('a,b,cd', ',');

/* result:

    value
--------
a
b
cd
*/  
4. 参考资料

跨DB/Server执行SP[分布式事务]

USE Database1
GO -- 如果不加SET FMTONLY OFF,在执行时可能会出现分布式事务异常
SELECT name, age, sex INTO #Persons FROM OPENQUERY(LinkedServer,
'SET FMTONLY OFF EXEC [database2].[dbo].uspGetPersonList')

在OpenQuery中执行带参数的SQL语句

DECLARE @Sql VARCHAR(1000)
DECLARE @organizationID VARCHAR(10)
SELECT @organizationID = (SELECT ORGANIZATION_ID FROM MYORGS WHERE ORGANIZATION_NAME = 'MMT')
SET @Sql = 'SELECT * from tableName where organization_id ='+@organizationID
SET @Sql = 'SELECT * FROM OPENQUERY(LinkedServerName, ''' + REPLACE(@Sql, '''', '''''') + ''')'
EXEC(@Sql)

  

SQL实用札记【SQL Sever篇】的更多相关文章

  1. 【SQL系列】深入浅出数据仓库中SQL性能优化之Hive篇

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SQL系列]深入浅出数据仓库中SQL性能优化之 ...

  2. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

  3. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  4. SQL实用

    实用的SQL语句   行列互转 create table test(id int,name varchar(20),quarter int,profile int) insert into test  ...

  5. Sql server之sql注入篇

    SQL Injection 关于sql注入的危害在这里就不多做介绍了,相信大家也知道其中的厉害关系.这里有一些sql注入的事件大家感兴趣可以看一下 防范sql注入的方法无非有以下几种: 1.使用类型安 ...

  6. SQL数据库基础知识-巩固篇<一>

    SQL数据库基础知识-巩固篇<一>... =============== 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用 ...

  7. 【 PostgreSQL】十条实用数据库SQL优化建议

    基于PostgreSQL,总结几条常用的查询操作的优化建议,部分也适用于Oracle等数据库. 1.选择合适的分布键 分布键选择不当会导致重分布.数据分布不均等,而数据分布不均会使SQL集中在一个se ...

  8. SQL优化:一些简单的又实用的SQL优化方案【转】

    面试过程中,面试官有极高的频率会问道数据库的优化,SQL语句的优化,网上关于SQL优化的教程很多,但是鱼目混杂,显得有些杂乱不堪.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请 ...

  9. 讲sql注入原理的 这篇不错(有空可以看看)

    我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或 ...

随机推荐

  1. php面向对象精要(2)

    1,self与parent关键字 >self指向当前的类,常用来访问静态成员,方法和常量 >parent指向父类,常用来调用父类的构造函数和方法和成员,也可以用来访问常量 <?php ...

  2. 华中农业大学第五届程序设计大赛网络同步赛-A

    Problem A: Little Red Riding Hood Time Limit: 1 Sec  Memory Limit: 1280 MBSubmit: 860  Solved: 133[S ...

  3. JS 模块 p6

    利用了闭包的模块: 简单模块例子: function fn(){ ; function y(){ console.log(x); } return { y:y} }var do1 = fn() do1 ...

  4. DrawerLayout建立侧滑时,显示侧滑页面,底层页面仍可以有点击响应,解决办法。

    第一感觉是下层仍有焦点,解决办法应该是侧方页面出现后,下层页面的焦点改为false,应该是动态去改变焦点的状态,但是不知道如何去实现. 然后再网上找到实现方法,感谢:http://blog.csdn. ...

  5. Android--监听View的两个指头是放大和缩小

    private double nLenStart = 0;//监听 WebView所用手势 @Override public boolean onTouch(View v, MotionEvent e ...

  6. 【Java入门提高篇】Day19 Java容器类详解(二)Map接口

    上一篇里介绍了容器家族里的大族长——Collection接口,今天来看看容器家族里的二族长——Map接口. Map也是容器家族的一个大分支,但里面的元素都是以键值对(key-value)的形式存放的, ...

  7. linux安装activemq

    ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多种语言 ...

  8. LeetCode题解之Number of Segments in a String

    1.题目描述 2.题目分析 找到字符串中的空格即可 3.代码 int countSegments(string s) { ){ ; } vector<string> v; ; i < ...

  9. 【SPL标准库专题(3)】 Classes

    我把SPL分为四个部分:Iterator,Classes,Datastructures,Function:而其中classes是就是做一些类的介绍(Iterator与Datastructures相关的 ...

  10. python 之socket

    socket,它最初做为BSD UNIX的进程通信机制,通常被称做"套接字",如今已经成为windows和mac等其它操作系统所共同遵守的网络编程标准. socket使用ip+端口 ...