累加运算符
DECLARE @i int=2 --定义变量并初始化值
SET @i*=2 --累加运算符
PRINT @i
一次插入多条记录
CREATE TABLE #t(c1 int,c2 nvarchar(10))
INSERT #t VALUES(1,'a'),(2,'b') --一次插入多条数据
SELECT c1,c2,c3
FROM #t
INNER JOIN
(
VALUES (1, 'aa'), (3, 'cc') --内联接多条数据
) t (c3, c4)
ON #t.c1 = t.c3;
--
--13.2.2节示例
--
GROUPING SETS的使用
SELECT ContactID,ManagerID,Count(1)
FROM HumanResources.Employee
GROUP BY GROUPING SETS (ContactID,ManagerID) --使用ContactID和ManagerID分组
GROUPING SETS的等价语句
SELECT NULL AS ContactID,ManagerID,Count(1)
FROM HumanResources.Employee
GROUP BY ManagerID --使用ManagerID进行分组
UNION ALL
SELECT ContactID,NULL AS ManagerID,Count(1)
FROM HumanResources.Employee
GROUP BY ContactID --使用ContractID进行分组
--
--13.2.3节示例
--
创建并初始化源表
CREATE TABLE tbSource --创建源表和数据
(
C1 INT PRIMARY KEY,
C2 NVARCHAR(10)
)
GO
INSERT tbSource
VALUES(1,N'甲'),
(2,N'乙')
GO
创建目标表和修改源表数据
SELECT * INTO tbTarget --创建目标表
FROM tbSource
--以下是对源表数据的修改
DELETE tbSource
WHERE C1=1
UPDATE tbSource
SET C2=N'乙'
WHERE C1=2
INSERT tbSource
VALUES(3,N'丙')
使用Merge合并表
MERGE tbTarget t --合并源表和目标表
USING tbSource s
ON t.c1 = S.c1 --合并依据
WHEN MATCHED THEN --修改
UPDATE SET t.c2 = S.c2
WHEN NOT MATCHED THEN --新增
INSERT VALUES(c1, c2)
WHEN NOT MATCHED BY SOURCE THEN --刪除
DELETE
OUTPUT $action, INSERTED.c1 [New c1], --输出合并操作结果
INSERTED.c2 [New c2],
DELETED.c1 [Original c1],
DELETED.c2 [Original c2];
--
--13.2.4节示例
--
创建表值类型
CREATE TYPE StudentTableType AS TABLE --创建表值类型
(
StudentID int,
ClassID int,
Mark int
)
使用表值参数的存储过程
CREATE PROC AddStudent
@stuTable StudentTableType READONLY --表值参数作为存储过程的参数
AS
INSERT INTO Student
SELECT *
FROM @stuTable --使用传入的表值参数
调用有表值参数的存储过程
DECLARE @stuTable StudentTableType --定义表值变量
INSERT INTO @stuTable --初始化表值变量内容
VALUES (20,1,95),(21,1,78),(22,2,88)
--调用有表值参数的存储过程
EXEC AddStudent @stuTable