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会被当做同一个值看待。 --=============================================================================================