随笔分类 -  SQL SERVER 之 T-SQL基础

SQL SERVER
摘要:GO:向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号1、批处理USE TESTGOIF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1; CREATE TABLE T1(ID INT IDENTITY(1,1) PRIMARY KEY,TT VARCHAR(10))DECLARE @VV VARCHAR(10)SET @VV = N'测试1'insert into T1(TT) values(@VV)GOSET @VV = N'测试2'insert into T1(TT) 阅读全文
posted @ 2013-04-16 21:51 _cc 阅读(1246) 评论(4) 推荐(0)
摘要:昨天碰着一个查询,两个结果集的并,查询花了近8分,还一直在查。就一个一个查总数据来测结果集,结果出现一个报错:消息 8115,级别 16,状态 2,第 1 行Arithmetic overflow error converting expression to data type int.一看是超出了类型,但是下面的存储都远远低于int的数据量的,百度一下,原来是count所求的数据量超出了int类型的总数。COUNT_BIG 始终返回 bigint 数据类型值。COUNT 始终返回 int 数据类型值语法COUNT_BIG ( { [ ALL | DISTINCT ] expression } 阅读全文
posted @ 2013-03-19 15:35 _cc 阅读(945) 评论(0) 推荐(0)
摘要:USE TESTgoDROP TABLE dbo.TEST_1,dbo.TEST_2,dbo.TEST_3 ,dbo.TEST_4 阅读全文
posted @ 2013-03-04 15:31 _cc 阅读(297) 评论(0) 推荐(0)
摘要:动态管理视图 sys.dm_os_wait_stats返回执行的线程所遇到的所有等待的相关信息。可以使用该聚合视图来诊断 SQL Server 以及特定查询和批处理的性能问题。列名数据类型说明wait_typenvarchar(60)等待类型的名称。waiting_tasks_countbigint该等待类型的等待数。该计数器在每开始一个等待时便会增加。wait_time_msbigint该等待类型的总等待时间(毫秒)。该时间包括 signal_wait_time_ms。max_wait_time_msbigint该等待类型的最长等待时间。signal_wait_time_msbigint正在 阅读全文
posted @ 2013-01-15 09:39 _cc 阅读(1235) 评论(0) 推荐(0)
摘要:--演示数据IF OBJECT_ID('tempdb..#A') IS NOT NULL DROP TABLE #AGOCREATE TABLE #A (A_ID INT,A_COL INT)INSERT #ASELECT 1 , 1 UNION ALLSELECT 2 , NULL UNION ALLSELECT 3 , 1 UNION ALLSELECT 3 , 2 UNION ALLSELECT 4 , 1IF OBJECT_ID('tempdb..#B') IS NOT NULL DROP TABLE #AGOCREATE TABLE #B(B_ID I 阅读全文
posted @ 2012-12-13 10:11 _cc 阅读(486) 评论(0) 推荐(0)
摘要:-- 对于表变量和临时表的例子:-- 约束(Constraint) 索引(Index) I/O 开销 作用域(SCOPE)存储位置 其他/* **************************************A) 约束(Constraint) : 在临时表和表变量,都可以创建Constraint ,针对表变量,只有定义时能加 CONSTRAINT******************************************* */USE tempdbGOIF OBJECT_ID('TEMPDB..#1') IS NOT NULL DROP TABLE dbo.# 阅读全文
posted @ 2012-12-11 10:56 _cc 阅读(11591) 评论(2) 推荐(2)
摘要:/********************************** 标识符 (IDENTITY) 值是一种特殊的值,它依赖于标识列,由SQL SERVER 自动维护,是自增的,而且一般是不会重复的.但是SQL SERVER并不维护标识(IDENTITY) 值唯一(要保证标识值唯一,应该在该列上使用主键或者唯一键约束)-----------------------------------------------------------------------------------------------------------1、标识值不连续 一般来说,出现下面的情况时,可能... 阅读全文
posted @ 2012-12-06 16:48 _cc 阅读(846) 评论(0) 推荐(0)
摘要:问题 1:为什么在已经有了临时表的情况下还要引入表变量?解答 1:与临时表相比,表变量具有下列优点:如 SQL Server 联机丛书“表”(Table) 一文中所述,表变量(如局部变量)具有明确定义的范围,在该范围结束时会自动清除这些表变量。与临时表相比,表变量导致存储过程的重新编译更少。涉及表变量的事务仅维持表变量上更新的持续时间。因此,使用表变量时,需要锁定和记录资源的情况更少。因为表变量具有有限的范围并且不是持久性数据库的一部分,所以事务回滚并不影响它们。问题 2:如果说使用表变量比使用临时表导致存储过程的重新编译更少,这意味着什么?解答 2:下面的文章讨论了重新编译存储过程的一些原因 阅读全文
posted @ 2012-12-05 10:58 _cc 阅读(880) 评论(0) 推荐(0)
摘要:--所在星期的第一天,计算给定日期所在星期的第1天(星期日为第一天) DECLARE @Date DATETIMESET @Date= GETDATE()--与SQL Server语言版本相关的算法--思路:当前日期+星期日(每周的第1天)与当前日期的差的天数--DATEPART(WEEKDAY,DATE)的返回值与@@DATEFIRST相关SET DATEFIRST 7 -- 或者设置为美国英语SET LANGUAGE us_english; (星期日为第一天)SELECT DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS 所在星期的第. 阅读全文
posted @ 2012-07-25 17:47 _cc 阅读(1336) 评论(0) 推荐(0)
摘要:DECLARE @Date DATETIMESET @Date=GETDATE()--前一天,给定日期的前一天SELECT DATEADD(DAY,-1,@Date) AS 前一天--后一天,给定日期的后一天 SELECT DATEADD(DAY,1,@Date) AS 后一天GO/*月初,计算给定日期所在月的第一天这个计算的技巧是先计算当前日期到“'1900-01-01'”的时间间隔数,然后把它加到“'1900-01-01'”上来获得特殊的日期,这个技巧可以用 来计算很多不同的日期。 根据SQL Server的时间表示方式可知,'1900-01-01& 阅读全文
posted @ 2012-07-20 14:39 _cc 阅读(3106) 评论(0) 推荐(0)
摘要:/*Environment: win7 + sql server 2008 r2Author: CCDesctiption: 常用日期函数整理: DAY,MONTH,YEAR , DATEPART DATEADD,DATENAME , DATEDIFF ,isdate 的使用*/--截取一个时间的年,月,日select DAY(GETDATE()) ,MONTH(GETDATE()) --MONTH() 函数的参数为整数时,一律返回整数值1,即SQL Server 认为其是1900 年1 月。 ,YEAR(GETDATE()) --其日期值应在... 阅读全文
posted @ 2012-07-17 15:50 _cc 阅读(3989) 评论(0) 推荐(0)
摘要:/*Environment: win7 + sql server 2008 r2Author: CCDesctiption: 常用日期格式SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm例如:select getdate()2012-07-17 14:48:49.913*/SELECT '----YY-MM-DD----' UNION ALLSELECT CONVERT(VARCHAR(26), GETDATE(), 120 ) UNION ALLSELECT CONVERT(VARCHAR(26), GETDAT 阅读全文
posted @ 2012-07-17 14:55 _cc 阅读(479) 评论(0) 推荐(0)
摘要:1、判断是否存在addOneArticle这个存储过程if Exists(select name from sysobjects where NAME = 'addOneArticle' and type='P')drop procedure addOneArticle2、判断是否存在countAr这个触发器if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[countAr]') and OBJECTPROPERTY(id, N'IsTrigger 阅读全文
posted @ 2012-06-19 14:47 _cc 阅读(6493) 评论(2) 推荐(1)
摘要:比较项EXECTUESP_EXECUTESQL字符串文本更改的后果影响SQL SERVER 查询优化器将新的T-SQL字符串与现有执行计划相匹配的功能T-SQL语句的实际文本在两次执行之间未更改,所以查询优化器能够将第二次执行中的T-SQL语句与第一次执行时生成的执行计划相匹配。因此SQL SERVER 不必编译第二条语句执行时是否重新生成字符串重新生成生成一次字符串转换每次执行时必须将参数值(非字符或者Unicode值)转换为字符或者Unicode格式整型参数按其本身格式指定,不需要转换为Unicode 阅读全文
posted @ 2012-06-13 18:02 _cc 阅读(310) 评论(0) 推荐(0)
摘要:use TESTgo--获取ASCII码对应的字符CHAR --如果是INT 数据类型的ASCII码,可以通过CHAR函数获得该ASCII码对应的字符 --CHAR(integer_expression) 这里是返回0-255之间的整数表达式,返回值为CHAR类型字符/*DECLARE @BeginPosition int declare @TempString varchar(100)set @BeginPosition = 1set @TempString = 'dancewithwave@163.com'WHILE @BeginPosition < = DATALE 阅读全文
posted @ 2012-06-07 17:14 _cc 阅读(438) 评论(0) 推荐(1)
摘要:USE TESTGOCREATE TABLE DBO.[Table_DateType_tinyint]([F_D_TINYINT] tinyint not null) ON [PRIMARY]GO--录入语句--向测试表中录入256条数据declare @i tinyintselect @i=0set nocount on while (@i<=255)begin insert into TEST.dbo.Table_DateType_tinyint values(@i); if (@i<=254) select @i=@i+1 else brea... 阅读全文
posted @ 2012-06-05 16:11 _cc 阅读(626) 评论(0) 推荐(0)
摘要:--1 CAST 函数 语法 CAST(EXPRESSION AS DATE_TYPE [(LENGTH)]) 参数说明见联机丛书DECLARE @price1 smallint;declare @price2 int;select @price1 = 1;select @price2 = 45000;select CAST(@price1 as int ) + @price2--2 CONVERT 语法 CONVERT( data_type [ ( length ) ] , expresion [ , style ]) 参数说明见联机丛书DECLARE @price1 smallin... 阅读全文
posted @ 2012-06-05 15:40 _cc 阅读(2014) 评论(0) 推荐(0)
摘要:-------------------------日期时间类型------------------------------------T-SQL YEAR,MONTH,DAY函数均一INT 数据类型的格式返回特定日期的年度信息.SELECT 'YEAR NUMBER' = YEAR(GETDATE())SELECT 'YEAR NUMBER' = MONTH(GETDATE())SELECT 'YEAR NUMBER' = DAY(GETDATE())--获取日期时间值部分DATEPARTDATEPART(DATEPART,DATE数据)--DA 阅读全文
posted @ 2012-06-05 15:35 _cc 阅读(2909) 评论(0) 推荐(0)
摘要:/*----------------------------------------SQL DATABASE: SQL SERVER 2008AUTHER: CCDATE: 2012-06-04Description:双引号(") : 用于表示引用的标识符中括号([]): 用于表示括号中的标识符t-sql中常在下列情况下使用分隔符a. 对象名称或对象名称的组成部分中包含保留字时b. 使用其它特殊的字符时-------------------------------------------*/USE TESTGOIF OBJECT_ID('tempdb..#t... 阅读全文
posted @ 2012-06-04 17:49 _cc 阅读(1729) 评论(0) 推荐(0)
摘要:--PARSENAME可以用截取字符串用,但是只能是四个以内,也就是三个分隔符DECLARE @T TABLE( COL VARCHAR(80))INSERT INTO @TSELECT '123_12_124' UNION ALL SELECT '1234_125_1243'SELECT COL, COL1 = PARSENAME(REPLACE(COL,'_','.'),3), ----替换一下 '.' 因为 parsename 只认 '.' COL2 = PARSENAME(REPLACE(C 阅读全文
posted @ 2012-05-15 16:06 _cc 阅读(602) 评论(0) 推荐(0)