Files
chill_notes/数据库/SQLServer/SQLSERVER存储过程基本语法.md
2026-04-21 20:40:43 +08:00

2.3 KiB
Executable File

SQL Server 存储过程基本语法

T-SQL 存储过程常用语法


一、变量定义

简单赋值

DECLARE @a INT
SET @a = 5
PRINT @a

-- 使用 SELECT 赋值
DECLARE @user1 NVARCHAR(50)
SELECT @user1 = '张三'
PRINT @user1

二、临时表

创建临时表

CREATE TABLE #TempTable
(
    [ID] INT NOT NULL,
    [Login] NVARCHAR(50) NOT NULL,
    [Name] NVARCHAR(50) NOT NULL
)

-- 插入数据
INSERT INTO #TempTable (ID, Login, Name) 
VALUES (100, 'LS', '临时')

-- 从查询创建
SELECT * INTO #TempTable2 FROM ST_User WHERE ID < 8

-- 删除
DROP TABLE #TempTable

表变量

DECLARE @t TABLE
(
    id INT NOT NULL,
    msg NVARCHAR(50) NULL
)

INSERT INTO @t VALUES (1, 'msg1')
INSERT INTO @t VALUES (2, 'msg2')

SELECT * FROM @t

三、IF/ELSE 条件

IF 条件
BEGIN
    -- 语句
END
ELSE IF 条件
BEGIN
    -- 语句
END
ELSE
BEGIN
    -- 语句
END

四、WHILE 循环

DECLARE @i INT = 1

WHILE @i <= 10
BEGIN
    PRINT @i
    SET @i = @i + 1
    
    -- 退出循环
    IF @i = 5
        BREAK
END

五、CASE 语句

SELECT 
    Name,
    CASE 
        WHEN Score >= 90 THEN '优秀'
        WHEN Score >= 60 THEN '及格'
        ELSE '不及格'
    END AS Grade
FROM Student

六、游标

DECLARE @id INT
DECLARE @name NVARCHAR(50)

DECLARE my_cursor CURSOR FOR
SELECT ID, Name FROM ST_User

OPEN my_cursor
FETCH NEXT FROM my_cursor INTO @id, @name

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT CAST(@id AS NVARCHAR) + ' - ' + @name
    FETCH NEXT FROM my_cursor INTO @id, @name
END

CLOSE my_cursor
DEALLOCATE my_cursor

七、存储过程

创建存储过程

CREATE PROCEDURE sp_GetUser
    @UserID INT
AS
BEGIN
    SELECT * FROM ST_User WHERE ID = @UserID
END

执行存储过程

EXEC sp_GetUser @UserID = 1

带输出参数

CREATE PROCEDURE sp_CountUser
    @Count INT OUTPUT
AS
BEGIN
    SELECT @Count = COUNT(*) FROM ST_User
END

八、常用函数

函数 说明
GETDATE() 当前日期时间
DATEADD() 日期加减
DATEDIFF() 日期间隔
ISNULL() 空值替换
CAST() 类型转换
LEN() 字符串长度