1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
--SET NOCOUNT ON
--sql server存储过程被创建之后,它的名字就存储在系统表sysobjects中;
--存储过程从创建到执行要经历语法分析、代码解析、编译和执行四个阶段;
--编译阶段是指分析存储过程和生成存储过程执行计划的过程
--查询教师的工资是否低于1200元,以便决定是否加薪
IF EXISTS (
SELECT
*
FROM
Teacher
WHERE
SAL < 1200)
BEGIN
SELECT
NO
,
NAME
,SAL
FROM
Teacher
WHERE
SAL <1200
SELECT
'以上教师工资<1200,需考虑加薪'
提示
END
ELSE
PRINT
'所有教师工资在计以上,暂时不考虑加薪'
--判断数据库是否存在
IF DB_ID(N
'Mytest'
)
IS
NOT
NULL
BEGIN
PRINT
'数据库存在'
--判断数据表是否存在
IF OBJECT_ID(
'Mytest..Teacher'
,
'U'
)
IS
NOT
NULL
PRINT
'数据表存在'
ELSE
PRINT
'数据表不存在'
END
ELSE
PRINT
'数据库不存在'
--while循环语句的用法
DECLARE
@I
INT
, @
SUM
INT
SELECT
@I=1, @
SUM
=0
WHILE @I < 10
SELECT
@
SUM
= @
SUM
+ @I, @I = @I + 1
PRINT @
SUM
--创建无参数的存储过程
USE Mytest
GO
CREATE
PROC TEST1
WITH
RECOMPILE
--在每次执行时对存储过程进行冲编译处理
AS
--用于指定该存储过程要执行的操作
SELECT
*
FROM
Teacher
--删除存储过程
DROP
PROC TEST1
--执行存储过程
EXEC
TEST1
--查看存储过程源代码(小写)
EXEC
sp_helptext TEST1
--查看存储过程的参数及其数据类型
EXEC
sp_help TEST4
--创建带输入参数的存储过程
USE Mytest
GO
CREATE
PROC TEST2
@TNAME
VARCHAR
(12)
--@TNAME VARCHAR(12) = '李'
AS
IF(@TNAME
IS
NULL
)
BEGIN
RAISERROR(
'NULL VALUE ARE INVALID'
,5,5)
RETURN
--立刻退出该过程,只能返回整数,默认返回值为0
END
ELSE
BEGIN
SELECT
*
FROM
Teacher
WHERE
Tname = @TNAME
RETURN
END
DROP
PROC TEST2
DECLARE
@RETURN_VALUE
INT
EXEC
@RETURN_VALUE=TEST2
'李'
SELECT
@RETURN_VALUE
/*return返回
0:过程成功执行
1:对象丢失
2:发生数据类型错误
3:处理过程被死锁
4:发生权限错误
5:发生语法错误
6:发生恶意用户错误
7:发生资源错误
*/
--创建带输出参数的存储过程
USE Mytest
GO
CREATE
PROC TEST3
@TNAME
VARCHAR
(12)
OUTPUT
AS
BEGIN
SELECT
@TNAME = Tname
FROM
Teacher
WHERE
T# = 50050
END
DROP
PROC TEST3
DECLARE
@
NAME
VARCHAR
(12)
EXEC
TEST3 @
NAME
OUTPUT
SELECT
@
NAME
--创建带入参和出参的存储过程
USE Mytest
GO
CREATE
PROC TEST4
@TNAME
VARCHAR
(12),
@
NAME
VARCHAR
(12)
OUTPUT
AS
BEGIN
UPDATE
Teacher
SET
Tname = @TNAME
WHERE
T# = 50050
SELECT
@
NAME
= Tname
FROM
Teacher
WHERE
Tname = @TNAME
END
DROP
PROC TEST4
DECLARE
@tNAME
VARCHAR
(12)
EXEC
TEST4
'李'
,@tNAME
OUTPUT
SELECT
@tNAME
--建立创建sql server数据表的存储过程
CREATE
PROC SP_CREATE_TABLE
@TableName SYSNAME
AS
EXEC
(
'CREATE TABLE '
+@TableName+
' (column1 varchar(100), column2 varchar(100))'
);
--EXEC('DROP TABLE '+@TableName);
--EXEC('ALTER TABLE '+@TableName+ ...)
GO
DROP
PROC SP_CREATE_TABLE
EXEC
SP_CREATE_TABLE testT
DROP
TABLE
testT
--建立重命名sql server数据表的存储过程
CREATE
PROC SP_RENAME_TABLE
@OLD_TABLE_NAME SYSNAME,
@NEW_TABLE_NAME SYSNAME
AS
IF EXISTS(
SELECT
*
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA =
'dbo'
AND
TABLE_TYPE =
'BASE TABLE'
AND
TABLE_NAME = @OLD_TABLE_NAME)
BEGIN
EXEC
sp_rename @OLD_TABLE_NAME, @NEW_TABLE_NAME
--EXEC sp_renamedb @OldDataBaseName, @NewDataBaseName --重命名数据库
END
DROP
PROC SP_RENAME_TABLE
EXEC
SP_RENAME_TABLE
'testT'
,
'testTable'
|