存储过程

  1. CREATE PROCEDURE spInsertOrUpdateProduct
  2. --有则更新,否则插入
  3. @ProductName NVARCHAR(50) ,
  4. @ProductNumber NVARCHAR(25) ,
  5. @StdCost MONEY
  6. AS
  7. IF EXISTS ( SELECT *
  8. FROM Production.Product
  9. WHERE ProductNumber = @ProductNumber )
  10. UPDATE Production.Product
  11. SET Name = @ProductName ,
  12. StandardCost = @StdCost
  13. WHERE ProductNumber = @ProductNumber
  14. ELSE
  15. INSERT INTO Production.Product
  16. ( Name ,
  17. ProductNumber ,
  18. StandardCost
  19. )
  20. SELECT @ProductName ,
  21. @ProductNumber ,
  22. @StdCost
  23.  
  24. GO

触发器

  1. CREATE TRIGGER tr_DelProduct ON Production.Product
  2. FOR DELETE
  3. AS
  4. IF ( SELECT COUNT(*)
  5. FROM sales.SalesOrderDetail
  6. INNER JOIN DELETED ON salesorderdetail.ProductID = DELETED.productid
  7. ) > 0
  8. BEGIN
  9. RAISERROR ('Cannot delete a product with sales orders',14,1)
  10. ROLLBACK TRANSACTION
  11. RETURN
  12. END

自定义函数

  1. CREATE FUNCTION dbo.fn_LastOfMonth ( @TheDate DATETIME )
  2. RETURNS DATETIME
  3. AS
  4. BEGIN
  5. DECLARE @FirstOfMonth DATETIME
  6. DECLARE @DaysInMonth INT
  7. DECLARE @RetDate DATETIME
  8. SET @FirstOfMonth = DATEADD(mm, DATEDIFF(mm, 0, @TheDate), 0)
  9. SET @DaysInMonth = DATEDIFF(d, @FirstOfMonth,
  10. DATEADD(m, 1, @FirstOfMonth))
  11. RETURN DATEADD(d,@DaysInMonth-1,@FirstOfMonth)
  12. END

查看表的元数据,也就是数据的数据

  1. SELECT *
  2. FROM sys.columns
  3. WHERE [object_id] = OBJECT_ID('Production.Product')

不建议用上面的系统试图
可以用数据库视图

  1. IF NOT EXISTS ( SELECT *
  2. FROM INFORMATION_SCHEMA.TABLES
  3. WHERE TABLE_NAME = 'Address'
  4. AND TABLE_NAME = 'Person' )
  5. DROP TABLE PERSON.Address
  6. GO

修改对象

  1. ALTER PROCEDURE spInsertOrUpdateProduct
  2. @ProductName NVARCHAR(50) ,
  3. @ProductNumber NVARCHAR(25) ,
  4. @StdCost MONEY ,
  5. @ListPrice MONEY
  6. AS
  7. BEGIN TRY
  8. BEGIN TRANSACTION
  9. IF EXISTS ( SELECT *
  10. FROM Production.Product
  11. WHERE ProductNumber = @ProductName )
  12. UPDATE Production.Product
  13. SET Name = @ProductName ,
  14. StandardCost = @StdCost
  15. WHERE ProductNumber = @ProductNumber
  16. ELSE
  17. INSERT INTO production.Product
  18. ( Name ,
  19. ProductNumber ,
  20. StandardCost ,
  21. ListPrice
  22. )
  23. SELECT @ProductName ,
  24. @ProductNumber ,
  25. @StdCost ,
  26. @ListPrice
  27. COMMIT TRANSACTION
  28. END TRY
  29. BEGIN CATCH
  30. DECLARE @ErrMsg VARCHAR(1000)
  31. SET @ErrMsg = ERROR_MESSAGE()
  32. ROLLBACK TRANSACTION
  33. RAISERROR(@ErrMsg,14,1)
  34. RETURN
  35. END CATCH

添加和删除表列

  1. ALTER TABLE Production.Product
  2. ADD LeadTime SMALLINT NULL
  3.  
  4. ALTER TABLE production.Product
  5. DROP COLUMN LeadTime

WITH TIES用法,找出最贵的一个商品,但最贵的有好多个

  1. SELECT TOP(1) WITH TIES * FROM Production.Product
  2. ORDER BY ListPrice DESC
  3. --返回5条记录

交叉表查询

  1. CREATE TABLE [Test]
  2. (
  3. [id] [int] IDENTITY(1, 1)
  4. NOT NULL ,
  5. [name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS
  6. NULL ,
  7. [subject] [nvarchar](50) COLLATE Chinese_PRC_CI_AS
  8. NULL ,
  9. [Source] [numeric](18, 0) NULL
  10. )
  11. ON [PRIMARY]
  12. GO
  13. INSERT INTO [test]
  14. ( [name], [subject], [Source] )
  15. VALUES ( N'张三', N'语文', 60 ) ,
  16. ( N'李四', N'数学', 70 ),
  17. ( N'王五', N'英语', 80 ),
  18. ( N'王五', N'数学', 75 ),
  19. ( N'王五', N'语文', 57 ),
  20. ( N'李四', N'语文', 80 ),
  21. ( N'张三', N'英语', 100 );
  22. Go
  23.  
  24. SELECT *
  25. FROM test
  26.  
  27. -------方法一----------
  28. SELECT name ,
  29. SUM(CASE subject
  30. WHEN '数学' THEN source
  31. ELSE 0
  32. END) AS '数学' ,
  33. SUM(CASE subject
  34. WHEN '英语' THEN source
  35. ELSE 0
  36. END) AS '英语' ,
  37. SUM(CASE subject
  38. WHEN '语文' THEN source
  39. ELSE 0
  40. END) AS '语文'
  41. FROM test
  42. GROUP BY name
  43. ------方法二--------
  44. DECLARE @sql VARCHAR(8000)
  45. SET @sql = 'select name,'
  46. SELECT @sql = @sql + 'sum(case subject when ''' + subject + '''
  47. then source else 0 end) as ''' + subject + ''','
  48. FROM ( SELECT DISTINCT
  49. subject
  50. FROM test
  51. ) AS a
  52. SELECT @sql = LEFT(@sql, LEN(@sql) - 1) + ' from test group by name'
  53. EXEC(@sql)
  54. go

游标

  1. USE Northwind
  2. GO
  3.  
  4. DECLARE curProduct CURSOR
  5. FOR
  6. SELECT ProductID ,
  7. ProductName
  8. FROM dbo.Products
  9.  
  10. DECLARE @ProdID INT
  11. DECLARE @ProdName NVARCHAR(100)
  12.  
  13. OPEN curProduct
  14. FETCH NEXT FROM curProduct INTO @ProdID, @ProdName
  15. WHILE @@FETCH_STATUS = 0
  16. BEGIN
  17. PRINT @ProdName
  18. FETCH NEXT FROM curProduct INTO @ProdID, @ProdName
  19. END
  20.  
  21. CLOSE curProduct
  22. DEALLOCATE curProduct
  23. ---------------------------------------------

CASE用法1

  1. USE AdventureWorks2008
  2. GO
  3. SELECT ProductID ,
  4. Name ,
  5. ListPrice ,
  6. ProductSubcategoryID ,
  7. CASE ProductSubcategoryID
  8. WHEN 1 THEN 'Mountain Bike'
  9. WHEN 2 THEN 'Road Bike'
  10. WHEN 3 THEN 'Touring Bike'
  11. WHEN NULL THEN 'Something Else'
  12. ELSE '(No SubCategory)'
  13. END AS SubCategory
  14. FROM Production.Product
  15. ----------------------------------------

CASE用法2

  1. SELECT ProductID ,
  2. Name ,
  3. ListPrice ,
  4. ProductSubcategoryID ,
  5. SubCategory = CASE ProductSubcategoryID
  6. WHEN 1 THEN 'Mountain Bike'
  7. WHEN 2 THEN 'Road Bike'
  8. WHEN 3 THEN 'Touring Bike'
  9. WHEN NULL THEN 'Something Else'
  10. ELSE '(No Subcategory)'
  11. END
  12. FROM Production.Product
  13. -----------------------------------------------------

自动增长列操作1

  1. SET IDENTITY_INSERT myTable ON --关闭自动增长
  2. INSERT myTable(myID, myDescription)
  3. VALUES(5,'This will work')
  4. SET IDENTITY_INSERT myTable OFF --开启自动增长
  5. --------------------------------------------------------------------

表连接

http://blog.163.com/ji_1006/blog/static/10612341201310221261829/

T-SQL 片段收藏的更多相关文章

  1. MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)

    一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...

  2. 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)

    动态Sql是Mybatis的核心,就是对我们的sql语句进行灵活的操作,他可以通过表达式,对sql语句进行判断,然后对其进行灵活的拼接和组装.可以简单的说成Mybatis中可以动态去的判断需不需要某些 ...

  3. mybatis动态SQL中的sql片段

    在mybatis中通过使用SQL片段可以提高代码的重用性,如下情景: 1.创建动态SQL <sql id="sql_count">select count(*)< ...

  4. ibatis复用SQL片段、引入片段 动态条件增加

    1:ibatis复用SQL片段.引入片段  使用[sql]和[include]标签: 通常情况下,你会这样写:xml 代码 <select id="selectItemCount&qu ...

  5. Mybatis Sql片段的应用

    在一个查询里,针对各种不同数据库,有时候只是一部分 SQL 是不相同的,为避免相同的部分复制多次,所以将不相同的部分进行适当的隔离,再重用就可以了. 在 MyBatis 里声明两段 <sql d ...

  6. 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

  7. SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简单概述一下本讲 别名,sql片段简单写一下,模糊查询多写一点 一.别名 <typeAliases> ...

  8. sql片段

    1):定义sql片段 <!-- 定义sql片段 --> <!-- id: sql片段的标识 经验:1:基于单表来定义sql片段,这样的话sql片段的可重用性才高 2:sql片段中不要 ...

  9. 使用mybatis提供的各种标签方法实现动态拼接Sql。使用sql片段提取重复的标签内容

    Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,如下: <select id="findUserByNameAndSex" par ...

  10. java-mybaits-00402-Mapper-动态sql-if、where、foreach、sql片段

    1.动态sql(重点) 通过mybatis提供的各种标签方法实现动态拼接sql. 什么是动态sql mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装.   ...

随机推荐

  1. 如何处理App的Application的事件

    http://blog.sina.com.cn/s/blog_44fa172f0102vwr2.html 直接上代码,还有条经验就是SetApplicationEventHandler可注册多个事件方 ...

  2. sqlserver错误2,error 40

    打开配置管理器:开始-> sqlserver2014->配置工具->配置管理器 选择sqlserver服务,并将右侧箭头的指向右击设为启动就OK了

  3. .net mvc使用FlexPaper插件实现在线预览PDF,EXCEL,WORD的方法

    FlexPaper插件可以实现在浏览器中在线预览pdf,word,excel等. 在网上看到很多关于这个插件实现预览的技术,但是很难做到word和excel在线预览. pdf很好实现. 首先下载相关的 ...

  4. R语言和RStudio的一些用法,常用命令等

    控制台: Up/down 回忆之前的命令 Ctrl+Up 回顾命令列表(可先输入前缀进行查找) 焦点: ctrl+ 移动焦点到source编辑器 ctrl+ 移动焦点到console ctrl+L 清 ...

  5. 前端分享----JS异步编程+ES6箭头函数

    前端分享----JS异步编程+ES6箭头函数 ##概述Javascript语言的执行环境是"单线程"(single thread).所谓"单线程",就是指一次只 ...

  6. Django(wsgiref、jinja2模块使用介绍)

    day60 wsgiref比较稳定 """ 根据URL中不同的路径返回不同的内容--函数进阶版 返回HTML页面 让网页动态起来 wsgiref模块版 "&qu ...

  7. elasticsearch 导入基础数据并索引之 geo_point

    elasticsearch 中的地理信息存储, 有geo_point形式和geo_shape两种形式 此篇只叙述geo_point, 地理位置需要声明为特殊的类型, 不显示在mapping中定义的话, ...

  8. 《JAVA与模式》之模板方法模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...

  9. 《JAVA与模式》之代理模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述代理(Proxy)模式的: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 代理模式的结 ...

  10. performSelector 的缺点

    在内存管理方面容易有缺失.无法确定将要执行的选择子具体是什么,所以 ARC 无法插入适当的内存管理方法 选择子的返回类型只能是 id,最多有两个参数. 所以尽量避免使用这个东西. 下面来自苹果的文档 ...