SQL NOTEVARIABLE

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


--=============================================================================================
原文地址:https://www.cnblogs.com/TeyGao/p/2726221.html