1.语法
CREATE PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]
[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
参数
procedure_name
新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。
要创建局部临时过程,可以在 procedure_name 前面加一个编号符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。
;number
是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。
@parameter
过程中的参数。在 CREATE PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。
使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。
data_type
参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。
说明 对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。
VARYING
指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。
default
参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。
OUTPUT
表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。
n
表示最多可以指定 2.100 个参数的占位符。
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
RECOMPILE 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。
ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。
说明 在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。
FOR REPLICATION
指定不能在订阅服务器上执行为复制创建的存储过程。.使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用。
AS
指定过程要执行的操作。
sql_statement
过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。
n
是表示此过程可以包含多条 Transact-SQL 语句的占位符。
2.动态执行生成sql的语句字符串
declare @SQLString nvarchar(200)
set @SQLString = N'select * from ' + @TableName
EXECUTE sp_executesql @SQLString 或EXEC(@SQLString)r
3.注释符:--
4.系统表,如SYSOBJECTS,SYSCOLUMNS,SYSTYPES表(可用select语句查看)
SYSOBJECTS为数据库内创建的每个对象(约束,规则,表,视图,触发器等)创建一条记录。
该表相关字段的含义如下:
SYSOBJECTS.name 对象名,如:表名,视图名。
SYSONJECTS.id 对象id。
SYSOBJECTS.type 对象类型(p存储过程,v视图,s系统表,u用户表)。
表SYSCOLUMNS为每个表、视图中的每个列和每个存储过程的每个参数创建一条记录。 该表相关字段的含义如下:(此处的列系指数据库中每个表、视图中的列)
SYSCOLUMNS.id 该列所属的表的id,可与SYSOBJECTS.id相关联
SYSCOLUMNS.colid 列id,表示该列是表或视图的第几列
SYSCOLUMNS.type 物理存储类型,可与SYSTYPES.type相关联.
SYSCOLUMNS.length 数据的物理长度。
SYSCOLUMNS.name 列名字,即字段名。
SYSCOLUMNS.Pre 列的精度级。
SYSCOLUMNS.Scale 列的标度级。
表SYSTYPES为每个系统和每个用户提供的数据类型创建一条记录,如果它们存在,给定域和默认值,描述系统提供的数据类型的行不可更改。
该表相关字段的含义如下:
SYSTYPES.name 数据类型的名字。
SYSTYPES.type 物理存储数据类型。
5. 事务:事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消,这一组数据库操作命令要么都执行,要么都不执行。
开始事物:BEGIN TRANSACTION
提交事物:COMMIT TRANSACTION
回滚事务:ROLLBACK TRANSACTION
保存事务: SAVE TRANSACTION
BEGIN TRANSACTION--开始事务
DECLARE @errorSun INT --定义错误计数器
SET @errorSun=0 --没错为0
UPDATE a SET id=232 WHERE a=1 --事务操作SQL语句
SET @errorSun=@errorSun+@@ERROR --累计是否有错
UPDATE aa SET id=2 WHERE a=1 --事务操作SQL语句
SET @errorSun=@errorSun+@@ERROR --累计是否有错
IF @errorSun<>0
BEGIN
PRINT '有错误,回滚'
ROLLBACK TRANSACTION--事务回滚语句
END
ELSE
BEGIN
PRINT '成功,提交'
COMMIT TRANSACTION--事务提交语句
END
6.变量:变量必须以@开头,而以@@开头的为全局变量
7游标的使用
声明游标:DECLARE <游标名>CURSOR FOR<SELECT语句>;
打开游标: OPEN mycursor
读取数据: FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 游标名 | @游标变量名 }
关闭游标: CLOSE mycursor
删除游标 : DEALLOCATE mycursor
declare @id nvarchar(20)
declare @A float
declare mycursor cursor for select * from tb_c
open mycursor
fetch next from mycursor into @id,@A while(@@fetch_status=0)
begin
select tb_b.name,(tb_b.gz + @A) from tb_b where tb_b.id = @id
fetch next from mycursor into @id,@A
end
close mycursor deallocate mycurso
分享到:
相关推荐
熟悉MySQL将使你能够高效地存储和检索数据,为Web应用提供稳定的数据支持。 再者,W3School是一个知名的在线学习平台,提供了丰富的Web技术教程,包括HTML、CSS、JavaScript等。W3School的手册通常以易于理解的方式...
【java大杂烩.zip】这个压缩包集合了多个与Java相关的工具和资源,涵盖了开发、部署、测试以及辅助工具等多个方面。以下是对每个子文件的详细解析: 1. **jdk-8u202-linux-x64.tar.gz**: 这是Oracle JDK 8的更新...
对于交互性强的社区网站,如MOP大杂烩,帖子和文章的实时静态化也是常见做法。 其次,**图片服务器分离**是减轻主服务器负担的关键。图片通常占用了大量带宽和服务器资源,将图片存储和分发独立到专门的图片服务器...
API.Spring2.5.sql.2.1.w3school.Struts2.1.8JavaAPI中文手册.Javascript特效大全(上册)].java.ee6.chm":这是一个包含多种技术的大杂烩,涵盖了CSS2和CSS3,DHTML,Ext.js,J2EE 5.0,JavaScript,JPA注解,jQuery ...
这些网站如Friendster、Myspace、Facebook、Flickr、LiveJournal、猫扑大杂烩以及校内网,都是社区网站的代表,它们的技术特性包括: 1. **海量数据**:由于用户生成内容(UGC)的增加,数据库规模庞大,关系复杂,...
例如Mop大杂烩、网易社区等都采用了这种策略。 4. **缓存策略中的静态化**:对于那些频繁调用数据库但内容更新缓慢的部分,可以考虑将其静态化处理,以此减少不必要的数据库访问,提高系统响应速度。 #### 二、图片...
在互联网的快速发展中,大型互动网站如Friendster、Myspace、Facebook、Flickr、LiveJournal、猫扑大杂烩以及校内网等,已经成为人们日常生活的一部分。这些网站的成功不仅依赖于其创新的功能和吸引人的内容,更在于...
对于社区网站,实时静态化帖子和文章可以显著提高性能,如MOP的大杂烩和网易社区采用的就是这种方法。此外,对于数据库查询频繁但更新较少的应用场景,例如论坛的公共设置信息,可以考虑在更新时进行静态化,以减少...
例如,新闻门户通常使用CMS来管理和发布内容,社区类网站则会采用实时静态化技术,如Mop的大杂烩和网易社区。 2. **图片服务器分离**:为减轻Web服务器的压力,图片通常会被分离开来,存储在独立的图片服务器上。这...
- 对于社区和交互性强的网站,实时静态化帖子和文章有助于提高性能,如MOP大杂烩和网易社区。 - 缓存策略中,对于不常更新但频繁查询的数据,可以考虑静态化,减少数据库访问。 2. **图片服务器分离**: - 图片...