随笔分类 - mssql
摘要:数据量2000,其中有1000重复---------------------------------------------------------------------------------------方法一,IN方式,适合2000/2005/2008,6728毫秒DELETE[student_L]WHEREidNOTIN(SELECTMAX(id)--min(id)FROM[student_L]GROUPBY[stuid],[stuname],[Birthday],[AreaOrganID])/*SQLServer分析和编译时间:CPU时间=20毫秒,占用时间=20毫秒。表's
阅读全文
摘要:15秒跟2秒之间的区别 UPDATE a SET flag = 1 FROM LINK_39.test_01.dbo.NSB_test AS a WHERE bh IN ( SELECT TOP 500 bh FROM LINK_39.test_01.dbo.NSB_test WHERE bh IS NOT NULL ORDER BY bh )DECLARE @bh VARCHAR(MAX)= '' SELECT @bh = @bh + ',' + CAST(CAST(bh AS INT) AS VARCHAR(10)) FROM ( SELECT TOP 50
阅读全文
摘要:问题描述:有表tb, 如下:id values----------- -----------1 aa,bb2 aaa,bbb,ccc欲按,分拆values列, 分拆后结果如下:id value----------- --------1 aa1 bb2 aaa2 bbb2 ccc1. 旧的解决方法SELECT TOP 8000 id = IDENTITY(int, 1, 1)INTO #FROM syscolumns a, syscolumns bSELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values]
阅读全文
摘要:这些天看了一篇微软官方发布的MS SQL Server2008性能问题处理及优化的英文文档,里面知识点介绍地很详细,在现实工作中也很实用,遂产生了想把它翻译一下的念头。翻译的过程,既可以帮助自己复习一下这些技术,也可以向其他还不熟悉这一块的朋友介绍一些新的知识,何乐而不为呢。只是这篇文章有点长,我会分成几篇随笔去介绍,所以,不光是对我耐性的考验,也是对你的考验哦!-------------------------------------------- tempdb全局存储内部对象,用户对象,临时表,临时对象,以及SQL Server操作创建的存储过程。每个数据库实例只有一个tempdb,所以.
阅读全文
摘要:关于表变量是什么(和表变量不是什么),以及和临时表的比较让很多人非常困惑。虽然网上已经有了很多关于它们的文章,但我并没有发现一篇比较全面的。在本篇文章中,我们将探索表变量和临时表是什么(以及不是什么),然后我们通过使用临时表和表变量对其解密。表变量 表变量在SQL Server 2000中首次被引入,那么,什么是表变量呢?微软在BOL (Declare @local_variable)中定义其为一个类型为表的变量。它的具体定义包括列定义,列名,数据类型和约束。而在表变量中可以使用的约束包括主键约束,唯一约束,Null约束和Check约束(外键约束不能在表变量中使用).定义表变量的语句是和正常.
阅读全文
摘要:--创建测试表CREATE TABLE test1(id int)delete会话一BEGIN TRANdelete test1INSERT test1SELECT 1会话二INSERT test1SELECT 1一先,二后,二瞬间完成,没有发生阻塞---------------------------------------------------------------------sp_lock------------------------------------------------------------------------------------------------tru
阅读全文
摘要:USE tempdbGOSET STATISTICS TIME OFF SET STATISTICS io OFF drop table #resultcreate table #result([插入行数] int,[正常临时表] int,[新加GUID列的临时表] int,[新加自增列临时表] int,列集 int,[into方式创建临时表] int)set nocount on declare @i int = 0while @i<=30 begin begin try drop table #Studentid drop table #Studentid1 drop table #
阅读全文
摘要:USE tempdbGOSET STATISTICS TIME OFF SET STATISTICS io OFF drop table #resultcreate table #result( [插入行数] int , [正常临时表] int, [行压缩临时表] int, [into方式创建临时表] int, [新加GUID列的临时表] int, [页压缩临时表] int, [行压缩临时表+新加GUID列] int, [页压缩临时表+新加GUID列] int, [新加自增列临时表] int) set nocount on declare @i int =0while @i<=5000b
阅读全文
摘要:--动态处理select A.StuName,A.BZKTypeName,cast(A.BKCODE as varbinary(MAX)) even, row_number() over (partition by StuName,BZKTypeName order by getdate()) ID into #t1 from BKLIST A --where StuName='林健辉' declare @sql1 varchar(max) declare @sql2 varchar(max) declare @id int declare @maxid int select
阅读全文
摘要:1.只有关联条件有非聚集索引--清空缓存DBCC FREEPROCCACHE WITH NO_INFOMSGSDBCC FREESESSIONCACHE WITH NO_INFOMSGSDBCC FREESYSTEMCACHE('All') WITH NO_INFOMSGSDBCC DROPCLEANBUFFERS WITH NO_INFOMSGSSET NOCOUNT onCREATE TABLE #result(状态 varchar(20),[id(毫秒)] INT,[guid(毫秒)] INT)DECLARE @start INTDECLARE @end INTSET @
阅读全文
摘要:【sqlserver】:sqlserver 认为 null 最小。升序排列:null 值默认排在最前。要想排后面,则:order by case when col is null then 1 else 0 end ,col降序排列:null 值默认排在最后。要想排在前面,则:order by case when col is null then 0 else 1 end , col desc【oracle】:oracle认为 null 最大。升序排列,默认情况下,null值排后面。降序排序,默认情况下,null值排前面。有几种办法改变这种情况:(1)用 nvl 函数或decode 函数 将n
阅读全文
摘要:--生成码表if exists (select * from dbo.sysobjects where id = object_id(N'[codetable]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [codetable]GOdeclare @j varchar(8000),@f varchar(8000)select @j='一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专
阅读全文
摘要:declare @class varchar(max)= dbo.super_GetSubClass1(378,default,default); set statistics io on set statistics time on -- XML SELECT B.value FROM ( SELECT [values] = CONVERT(xml,'<root><v>'+REPLACE([values],',', '</v><v>') +'</v></root>&
阅读全文
摘要:问题描述:有表tb,如下:idvalues----------- -----------1aa,bb2aaa,bbb,ccc欲按,分拆values列,分拆后结果如下:idvalue----------- --------1aa1bb2aaa2bbb2ccc1.旧的解决方法SELECTTOP8000id=IDENTITY(int,1,1)INTO#FROMsyscolumns a,syscolumns bSELECTA.id,SUBSTRING(A.[values],B.id,CHARINDEX(',',A.[values]+',',B.id)-B.id)FROM
阅读全文
摘要:数据类型范围存储bigint-2^63(-9,223,372,036,854,775,808)到2^63-1(9,223,372,036,854,775,807)8字节int-2^31(-2,147,483,648)到2^31-1(2,147,483,647)4字节smallint-2^15(-32,768)到2^15-1(32,767)2字节tinyint0到2551字节money-922,337,203,685,477.5808到922,337,203,685,477.58078字节smallmoney-214,748.3648到214,748.36474字节decimal...
阅读全文
摘要:with tiesWITH TIES指定从基本结果集中返回额外的行,对于 ORDER BY 列中指定的排序方式参数,这些额外的返回行的该参数值与 TOPn(PERCENT) 行中的最后一行的该参数值相同。只能在 SELECT 语句中且只有在指定了 ORDER BY 子句之后,才能指定 TOP...WITH TIES。注意:返回的记录关联顺序是任意的。ORDER BY不影响此规则来源:MSDN,http://msdn.microsoft.com/zh-cn/library/ms189463.aspx通俗解释如果按照order by 参数排序TOP n(PERCENT)返回了前面n(pencent
阅读全文
摘要:今天在一个存储过程中看见了merge这个关键字,第一个想法是,这个是配置管理中的概念吗,把相邻两次的更改合并到一起。后来在technet上搜索发现别有洞天,原来是另外一个sql关键字,t-sql的语法还是相当地丰富的。本篇是一篇学习笔记,没有什么新意,这里给出technet上的地址连接供大家参考权威:http://technet.microsoft.com/zh-cn/library/bb510625.aspx,这里具体的语法不去深究了,只是把几个例子实际运行,剖析一番。 使用merge同时执行insert和update操作我们经常会有这样的需求,根据某个字段或多个字段查找表中的一行或多行数.
阅读全文
摘要:SET QUOTED_IDENTIFIER ONSELECT * FROM "student" WHERE stuname='江玉婷' SET QUOTED_IDENTIFIER ONSELECT * FROM [student] WHERE stuname='江玉婷' SET QUOTED_IDENTIFIER OFFSELECT * FROM [student] WHERE stuname='江玉婷' SET QUOTED_IDENTIFIER OFFSELECT * FROM [student] WHERE stunam
阅读全文
摘要:--SQLServer2008中新增功能:可以使用单个Insert命令插入多行。CreatetableDemo_Values(PKIDintnotnullidentity(1,1)primarykey,DNameNvarchar(20)null,DCodeNVarchar(30)null,DDatedatetimenull)go--thisSQLisonlyforSQLServer2008InsertintoDemo_Values(DName,DCode,DDate)values('DemoA','AAA',GETDATE()),('DemoB'
阅读全文