代码改变世界

sql 复习知识大全2

2012-06-21 11:18  周六一  阅读(737)  评论(0编辑  收藏  举报
  1 --触发器trigger
  2 disable trigger tri_t1 on database --禁用触发器   
  3 enable trigger tri_t1 on database --开启触发器 
  4 
  5 use ReviewDatabase
  6 go
  7 --1.For
  8 create trigger tri_t1       --修改触发器时,可以将create改为alter,再修改相应语句
  9 on dbo.t1                   --可以是视图
 10 --with encryption           --表进行加密(可省)
 11 for insert,update,delete    --阻止删除时,可以用ROLLBACK回滚 
 12 --not for replication       --表明当复制处理修改与触发器相关联的表时,触发器不能被执行(可省)
 13 as
 14    select * from t1,t2 where t1.id2=t2.id2   
 15 go
 16 
 17 drop trigger tri_t1         --删除触发器
 18 --2.after 和for一样  先会检测约束,这里会报错
 19 use ReviewDatabase
 20 go
 21 create trigger tri_t2
 22 on dbo.t2
 23 after insert,update,delete
 24 as
 25 begin
 26    select * from inserted
 27    select * from updated
 28    select * from deleted
 29 end
 30 
 31 insert t2(id1,id2) values(9,9)--这里会报错
 32 drop trigger tri_t2
 33 --2.after of --先会执行触发器再检测约束
 34 use ReviewDatabase
 35 go
 36 alter trigger tri_t2_of
 37 on dbo.t2
 38 after insert,update,delete
 39 as
 40 begin
 41    print 'inserted'
 42    select * from inserted   
 43    print 'deleted'
 44    select * from deleted
 45 end
 46 
 47 delete t2 where id1=9
 48 insert t2(id1,id2) values(9,9)
 49 update t2 set id3=10 where id1=9
 50 
 51 select * from t2 where id1=9
 52 /*-----------------------------------------------------------------------------------------------------*/
 53 --视图
 54 use ReviewDatabase
 55 go
 56 create view vi_t2
 57 with encryption 
 58 as 
 59   select * from t1
 60 go
 61 select * from vi_t2
 62 drop view vi_t2
 63 /*-----------------------------------------------------------------------------------------------------*/
 64 --储存过程procedure
 65 --常用系统存储过程有
 66 exec sp_databases; --查看数据库
 67 exec sp_tables;--查看表
 68 exec sp_columns t2;--查看列
 69 exec sp_helpIndex t1;--查看索引
 70 exec sp_helpConstraint t2;--约束
 71 exec sp_stored_procedures;
 72 exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
 73 exec sp_rename t1, stuInfo;--修改表、索引、列的名称
 74 exec sp_renamedb myTempDB, myDB;--更改数据库名称
 75 exec sp_defaultdb 'master''myDB';--更改登录名的默认数据库
 76 exec sp_helpdb;--数据库帮助,查询数据库信息
 77 exec sp_helpdb ReviewDatabase;--查询数据库信息
 78 
 79 --表重命名
 80 exec sp_rename 'test_sub''stu';
 81 select * from test_sub;
 82 --列重命名
 83 exec sp_rename 'stud.name''sName''column';
 84 exec sp_help 'stud';
 85 --重命名索引
 86 exec sp_rename N't1.idx_cid', N'idx_cidd', N'index';
 87 exec sp_help 't1';
 88 --查询所有存储过程
 89 select * from sys.objects where type = 'P';select * from sys.objects where type_desc like '%pro%' and name like 'sp%';
 90 
 91 --自定义存储过程
 92 --1、 创建语法
 93 /*
 94 create proc | procedure pro_name
 95     [{@参数数据类型} [=默认值] [output],
 96      {@参数数据类型} [=默认值] [output],
 97      ....
 98     ]
 99 as
100     SQL_语句
101 */
102 --2、 创建不带参数存储过程 
103 --创建存储过程
104 if (exists (select * from sys.objects where name = 'proc_get_t1'))
105     drop proc proc_get_t1
106 go
107 create proc proc_get_t1
108 as
109     select * from t1;
110 --调用、执行存储过程
111 exec proc_get_t1;
112 
113 --3、 修改存储过程 
114 --修改存储过程
115 alter proc proc_get_t1
116 as
117 select * from t1;
118 
119 --4、 带参存储过程 
120 --带参存储过程
121 if (object_id('proc_find_stu''P'is not null)
122     drop proc proc_find_t1
123 go
124 create proc proc_find_t1(@startId int@endId int)
125 as
126     select * from t1 where id1 between @startId and @endId
127 go
128 
129 exec proc_find_t1 24--不可以打乱顺序
130 exec proc_find_t1 @startId=2,@endId=4 --可以打乱顺序
131 
132 --5、 带通配符参数存储过程 
133 --带通配符参数存储过程
134 if (object_id('proc_findStudentByName''P'is not null)
135     drop proc proc_findt1ByName
136 go
137 create proc proc_findt1ByName(@name varchar(10= '%j%')
138 as
139     select * from t1 where name like @name;
140 go
141 
142 exec proc_findt1ByName;
143 exec proc_findt1ByName '%a%';
144 
145 --6、 带输出参数存储过程 
146 if (object_id('proc_gett1Record''P'is not null)
147     drop proc proc_gett1Record
148 go
149 create proc proc_gett1Record(
150     @id1 int--默认输入参数
151     @id2 int out, --输出参数
152     @id3 int output--输入输出参数
153 )
154 as
155     update t1 set id2 = @id2, id3 = @id3 where id1 = @id1;
156     set @id2=@id2+1
157     set @id3=@id3+1
158 go
159 
160 declare @id1 int=18,@id2 int,@id3 int;
161 set @id2 = 18
162 select @id3 = 18;
163 exec proc_gett1Record @id1@id2 out, @id3 output;
164 select @id2@id3;
165 print @id2 + ' ' + @id3;
166 
167 
168 --7、 不缓存存储过程 
169 --WITH RECOMPILE 不缓存
170 if (object_id('proc_temp''P'is not null)
171     drop proc proc_temp
172 go
173 create proc proc_temp
174 with recompile
175 as
176     select * from t1;
177 go
178 
179 exec proc_temp;
180 
181 --8、 加密存储过程 
182 --加密WITH ENCRYPTION 
183 if (object_id('proc_temp_encryption''P'is not null)
184     drop proc proc_temp_encryption
185 go
186 create proc proc_temp_encryption
187 with encryption
188 as
189     select * from t1;
190 go
191 
192 exec proc_temp_encryption;
193 exec sp_helptext 'proc_temp';
194 exec sp_helptext 'proc_temp_encryption';
195 
196 --9、 带游标参数存储过程 
197 if (object_id('proc_cursor''P'is not null)
198     drop proc proc_cursor
199 go
200 create proc proc_cursor
201     @cur cursor varying output
202 as
203     set @cur = cursor forward_only static for
204     select id1, id2, id3 from t1;
205     open @cur;
206 go
207 --调用
208 declare @exec_cur cursor;
209 declare @id1 int,
210         @id2 int,
211         @id3 int;
212 exec proc_cursor @cur = @exec_cur output;--调用存储过程
213 fetch next from @exec_cur into @id1@id2@id3;
214 while (@@fetch_status = 0)
215 begin
216     fetch next from @exec_cur into @id1@id2@id3;
217     print @id1 + @id2 + @id3;
218 end
219 close @exec_cur;
220 deallocate @exec_cur;--删除游标
欢迎来到六六的博客