GOTO 可以直接跳转到制定的标签
DECLARE @ID INT;
SET @ID=10;
IF(@ID=1)
BEGIN
GOTO myOk;
END
ELSE
BEGIN
GOTO myError;
END
myOk: PRINT 'OK';
myError: PRINT 'Error';
--=============================================================================================
WAITFOR:
1: WAITFOR DELAY '0:00:01';
2: WAITFOR TIME '12:00:00';
RETURN: Break the current batch and return value or nothing
RAISEERROR: Throw an error and continue to execute the next statement;
RAISERROR(N'error message',---message
10,--Severity,
1,--Error state
'Para1'--Parameter)
--=============================================================================================
全局变量(Global variable)使用@@作为前缀,由系统定义,在实例范围内可见,对用户只读
局部变量(Local variable)使用@作为前缀,在定义局部变量的批处理中可见,由用户创建、赋值或修改。
使用Declare来对局部变量声明,声明类型不能为Text/NText/Image类型,当声明为字符类型且没有指定长度时,默认长度为1;
所有为赋值的局部变量默认值为null;
可以使用SET和SELECT对局部变量赋值,在SELECT中对局部变量赋值时,如果SELECT查询结果为多行时,则使用最后一行的值对局部变量赋值。
DECLARE @ID NVARCHAR(200)
SELECT @ID=C1 FROM dbo.T1
SELECT @ID
DECLARE @ID NVARCHAR(200)
SET @ID=(SELECT TOP(1)C1 FROM dbo.T1)
SELECT @ID
--=============================================================================================
局部变量存在存在内存中(包括局部表变量)。
局部表变量是一种特殊的局部变量,与临时表有本质区别,不能在局部表变量上添加索引。
DECLARE @T TABLE
(
UserID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
UserName NVARCHAR(20)
)
INSERT INTO @T(UserName)
SELECT 'U1'
UNION ALL
SELECT 'U2'
SELECT * FROM @T
--=============================================================================================
集合操作
集合合并:UNION/UNION ALL
集合相交:INTERSECT
集合相减:EXCEPT
在集合操作中,NULL会被当做同一个值看待。
--=============================================================================================