T-SQL 片段收藏
存储过程
CREATE PROCEDURE spInsertOrUpdateProduct
--有则更新,否则插入
@ProductName NVARCHAR(50) ,
@ProductNumber NVARCHAR(25) ,
@StdCost MONEY
AS
IF EXISTS ( SELECT *
FROM Production.Product
WHERE ProductNumber = @ProductNumber )
UPDATE Production.Product
SET Name = @ProductName ,
StandardCost = @StdCost
WHERE ProductNumber = @ProductNumber
ELSE
INSERT INTO Production.Product
( Name ,
ProductNumber ,
StandardCost
)
SELECT @ProductName ,
@ProductNumber ,
@StdCost GO
触发器
CREATE TRIGGER tr_DelProduct ON Production.Product
FOR DELETE
AS
IF ( SELECT COUNT(*)
FROM sales.SalesOrderDetail
INNER JOIN DELETED ON salesorderdetail.ProductID = DELETED.productid
) > 0
BEGIN
RAISERROR ('Cannot delete a product with sales orders',14,1)
ROLLBACK TRANSACTION
RETURN
END
自定义函数
CREATE FUNCTION dbo.fn_LastOfMonth ( @TheDate DATETIME )
RETURNS DATETIME
AS
BEGIN
DECLARE @FirstOfMonth DATETIME
DECLARE @DaysInMonth INT
DECLARE @RetDate DATETIME
SET @FirstOfMonth = DATEADD(mm, DATEDIFF(mm, 0, @TheDate), 0)
SET @DaysInMonth = DATEDIFF(d, @FirstOfMonth,
DATEADD(m, 1, @FirstOfMonth))
RETURN DATEADD(d,@DaysInMonth-1,@FirstOfMonth)
END
查看表的元数据,也就是数据的数据
SELECT *
FROM sys.columns
WHERE [object_id] = OBJECT_ID('Production.Product')
不建议用上面的系统试图
可以用数据库视图
IF NOT EXISTS ( SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Address'
AND TABLE_NAME = 'Person' )
DROP TABLE PERSON.Address
GO
修改对象
ALTER PROCEDURE spInsertOrUpdateProduct
@ProductName NVARCHAR(50) ,
@ProductNumber NVARCHAR(25) ,
@StdCost MONEY ,
@ListPrice MONEY
AS
BEGIN TRY
BEGIN TRANSACTION
IF EXISTS ( SELECT *
FROM Production.Product
WHERE ProductNumber = @ProductName )
UPDATE Production.Product
SET Name = @ProductName ,
StandardCost = @StdCost
WHERE ProductNumber = @ProductNumber
ELSE
INSERT INTO production.Product
( Name ,
ProductNumber ,
StandardCost ,
ListPrice
)
SELECT @ProductName ,
@ProductNumber ,
@StdCost ,
@ListPrice
COMMIT TRANSACTION
END TRY
BEGIN CATCH
DECLARE @ErrMsg VARCHAR(1000)
SET @ErrMsg = ERROR_MESSAGE()
ROLLBACK TRANSACTION
RAISERROR(@ErrMsg,14,1)
RETURN
END CATCH
添加和删除表列
ALTER TABLE Production.Product
ADD LeadTime SMALLINT NULL ALTER TABLE production.Product
DROP COLUMN LeadTime
WITH TIES用法,找出最贵的一个商品,但最贵的有好多个
SELECT TOP(1) WITH TIES * FROM Production.Product
ORDER BY ListPrice DESC
--返回5条记录
交叉表查询
CREATE TABLE [Test]
(
[id] [int] IDENTITY(1, 1)
NOT NULL ,
[name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS
NULL ,
[subject] [nvarchar](50) COLLATE Chinese_PRC_CI_AS
NULL ,
[Source] [numeric](18, 0) NULL
)
ON [PRIMARY]
GO
INSERT INTO [test]
( [name], [subject], [Source] )
VALUES ( N'张三', N'语文', 60 ) ,
( N'李四', N'数学', 70 ),
( N'王五', N'英语', 80 ),
( N'王五', N'数学', 75 ),
( N'王五', N'语文', 57 ),
( N'李四', N'语文', 80 ),
( N'张三', N'英语', 100 );
Go SELECT *
FROM test -------方法一----------
SELECT name ,
SUM(CASE subject
WHEN '数学' THEN source
ELSE 0
END) AS '数学' ,
SUM(CASE subject
WHEN '英语' THEN source
ELSE 0
END) AS '英语' ,
SUM(CASE subject
WHEN '语文' THEN source
ELSE 0
END) AS '语文'
FROM test
GROUP BY name
------方法二--------
DECLARE @sql VARCHAR(8000)
SET @sql = 'select name,'
SELECT @sql = @sql + 'sum(case subject when ''' + subject + '''
then source else 0 end) as ''' + subject + ''','
FROM ( SELECT DISTINCT
subject
FROM test
) AS a
SELECT @sql = LEFT(@sql, LEN(@sql) - 1) + ' from test group by name'
EXEC(@sql)
go
游标
USE Northwind
GO DECLARE curProduct CURSOR
FOR
SELECT ProductID ,
ProductName
FROM dbo.Products DECLARE @ProdID INT
DECLARE @ProdName NVARCHAR(100) OPEN curProduct
FETCH NEXT FROM curProduct INTO @ProdID, @ProdName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @ProdName
FETCH NEXT FROM curProduct INTO @ProdID, @ProdName
END CLOSE curProduct
DEALLOCATE curProduct
---------------------------------------------
CASE用法1
USE AdventureWorks2008
GO
SELECT ProductID ,
Name ,
ListPrice ,
ProductSubcategoryID ,
CASE ProductSubcategoryID
WHEN 1 THEN 'Mountain Bike'
WHEN 2 THEN 'Road Bike'
WHEN 3 THEN 'Touring Bike'
WHEN NULL THEN 'Something Else'
ELSE '(No SubCategory)'
END AS SubCategory
FROM Production.Product
----------------------------------------
CASE用法2
SELECT ProductID ,
Name ,
ListPrice ,
ProductSubcategoryID ,
SubCategory = CASE ProductSubcategoryID
WHEN 1 THEN 'Mountain Bike'
WHEN 2 THEN 'Road Bike'
WHEN 3 THEN 'Touring Bike'
WHEN NULL THEN 'Something Else'
ELSE '(No Subcategory)'
END
FROM Production.Product
-----------------------------------------------------
自动增长列操作1
SET IDENTITY_INSERT myTable ON --关闭自动增长
INSERT myTable(myID, myDescription)
VALUES(5,'This will work')
SET IDENTITY_INSERT myTable OFF --开启自动增长
--------------------------------------------------------------------
表连接
http://blog.163.com/ji_1006/blog/static/10612341201310221261829/
T-SQL 片段收藏的更多相关文章
- MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)
一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...
- 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)
动态Sql是Mybatis的核心,就是对我们的sql语句进行灵活的操作,他可以通过表达式,对sql语句进行判断,然后对其进行灵活的拼接和组装.可以简单的说成Mybatis中可以动态去的判断需不需要某些 ...
- mybatis动态SQL中的sql片段
在mybatis中通过使用SQL片段可以提高代码的重用性,如下情景: 1.创建动态SQL <sql id="sql_count">select count(*)< ...
- ibatis复用SQL片段、引入片段 动态条件增加
1:ibatis复用SQL片段.引入片段 使用[sql]和[include]标签: 通常情况下,你会这样写:xml 代码 <select id="selectItemCount&qu ...
- Mybatis Sql片段的应用
在一个查询里,针对各种不同数据库,有时候只是一部分 SQL 是不相同的,为避免相同的部分复制多次,所以将不相同的部分进行适当的隔离,再重用就可以了. 在 MyBatis 里声明两段 <sql d ...
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...
- SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 简单概述一下本讲 别名,sql片段简单写一下,模糊查询多写一点 一.别名 <typeAliases> ...
- sql片段
1):定义sql片段 <!-- 定义sql片段 --> <!-- id: sql片段的标识 经验:1:基于单表来定义sql片段,这样的话sql片段的可重用性才高 2:sql片段中不要 ...
- 使用mybatis提供的各种标签方法实现动态拼接Sql。使用sql片段提取重复的标签内容
Sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,如下: <select id="findUserByNameAndSex" par ...
- java-mybaits-00402-Mapper-动态sql-if、where、foreach、sql片段
1.动态sql(重点) 通过mybatis提供的各种标签方法实现动态拼接sql. 什么是动态sql mybatis核心 对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. ...
随机推荐
- uva 579 ClockHands 几何初接触 求时针与分针的夹角
貌似是第一次接触几何题... 求时针与分针的夹角,这不是小学生的奥数题么.我小时候也想过这问题的. 每过一小时时针走1/12*360=30度,每过一分钟时针走1/60*30=0.5度,分针走1/60* ...
- Microsoft SQL Server 2012 管理 (1): 安装配置SQL Server 重点
SQL Server 可以在实例,数据库,列,查询分别指定排序规则 /* Module 1 - working with Clollations */ -- 1.1 Obtain the Instan ...
- python 实现过滤出tomcat日志中含有ERROR 或Exception 的行并保存在另一个文件
遍历多个tomcat日志文件,找出含有ERROR 和Exception 的日志,并把该行日志输出到另一个文件中:(这里为了体现python模块导入的知识,所有建立了多个文件夹和模块) 项目结构: co ...
- Dalsa线扫相机配置-一台工控机同时连接多个GigE相机
如图,我强悍的工控机,有六个网口. 实际用的时候连了多台相机,为了偷懒我就把六个网口的地址分别设为192.168.0.1~192.168.0.6,以为相机的IP只要设在192.168.0这个网段然后随 ...
- ASP.NET Core 2 学习笔记(六)MVC
ASP.NET Core MVC跟ASP.NET MVC观念是一致的,使用上也没有什么太大的变化.之前的ASP.NET MVC把MVC及Web API的套件分开,但在ASP.NET Core中MVC及 ...
- C#通过盘符获取剩余空间
public static long GetHardDiskSpace(string str_HardDiskName) { ; str_HardDiskName = str_HardDiskName ...
- beyondCompare试用期到期解决办法
找到beyond Compare 4文件夹下面的BCUnrar.dll,将其删掉或者重命名,再重新打开接着使用! 我这是转的,到期之后试试.
- elasticsearch 导入基础数据并索引之 geo_point
elasticsearch 中的地理信息存储, 有geo_point形式和geo_shape两种形式 此篇只叙述geo_point, 地理位置需要声明为特殊的类型, 不显示在mapping中定义的话, ...
- jvm内存结构(一)(结构总览)
jvm内存结构:<Java虚拟机原理图解>3.JVM运行时数据区 程序计数器: ,是执行的字节码的行号指示器,记录的是正在执行的虚拟机字节码指令的地址. ,每个线程都有独立计数器,互不干扰 ...
- 服务器端 安装svn
趁着这波比较闲的时候来划一波水,想起自己那都快生会的腾讯云服务器 到现在还不能通过版本控制系统上传文件,于是趁这波功夫在服务器上安装个svn来管理代码. 首先就简单的介绍一波 svn : 首先svn不 ...