标签:encrypt 批处理 sql spec timeout 逻辑 where 格式 多次
存储过程仅仅在创造时进行编译,而一般SQL语句每运行一次就编译一次,所以使用存储过程运行速度更快。
存储过程用于处理复杂的操作时,程序的可读性更强、网络的负担更小。
使用存储过程封装事务性能更佳。
能有效的放注入,安全性更好。
可维护性高。在一些业务规则发生变化时。有时仅仅需调整存储过程就可以。而不用修改和重编辑程序。
更好的代码重用。
◆ 缺点:
存储过程将给server带来额外的压力。
存储过程多多时维护比較困难。
移植性差。在升级到不同的数据库时比較困难。
调试麻烦。SQL语言的处理功能简单。
触发器是一种特殊的存储过程,不由用户直接调用。创建触发器时,将其定义为在对特定表或列进行特定类型的数据改动时激发。
能够引用在同一存储过程中创建的对象。仅仅要引用时已经创建了该对象就可以。
能够在存储过程内引用暂时表。
假设在存储过程内创建本地暂时表,则暂时表仅为该存储过程而存在;退出该存储过程后,暂时表将消失。
假设运行的存储过程将调用还有一个存储过程,则被调用的存储过程能够訪问由第一个存储过程创建的全部对象。包含暂时表在内。
假设运行对远程 Microsoft SQL Server 2005 实例进行更改的远程存储过程。则不能回滚这些更改。远程存储过程不參与事务处理。
存储过程中的參数的最大数目为 2100。
存储过程中的局部变量的最大数目仅受可用内存的限制。
依据可用内存的不同,存储过程最大可达 128 MB
实现存储过程
如:DECLARE @MyCounter int
第一次声明变量时,其值设置为 NULL。若要为变量赋值,请使用 SET 语句。这是为变量赋值的首选方法。也能够通过 SELECT 语句的选择列表中当前所引用值为变量赋值。
參数用于在存储过程和函数以及调用存储过程或函数的应用程序或工具之间交换数据:
输入參数同意调用方将数据值传递到存储过程或函数。
输出參数同意存储过程将数据值或游标变量传递回调用方。用户定义函数不能指定输出參数。
每一个存储过程向调用方返回一个整数返回代码。
假设存储过程没有显式设置返回代码的值。则返回代码为 0。
二、流程控制语句
1、BEGIN 和 END 语句
BEGIN 和 END 语句用于将多个 Transact-SQL 语句组合为一个逻辑块。在控制流语句必须运行包括两条或多条 Transact-SQL 语句的语句块的不论什么地方。都能够使用 BEGIN 和 END 语句。
如:
IF (@@ERROR <> 0)
BEGIN
SET @ErrorSaveVariable = @@ERROR
PRINT ‘Error encountered, ‘ +
CAST(@ErrorSaveVariable AS VARCHAR(10))
END
2、GOTO 语句
GOTO 语句使 Transact-SQL 批处理的运行跳至标签。不运行 GOTO 语句和标签之间的语句。
IF(1=1)
GOTO calculate_salary
print ‘go on‘ --条件成立则跳过此句。
calculate_salary:
print ‘go to‘
3、IF...ELSE 语句
IF 语句用于条件的測试。
得到的控制流取决于是否指定了可选的 ELSE 语句:
if(1=1)
print 1
else if(2=2)
print 2
else if(3=3)
print 3
else
print 0
4、RETURN 语句
RETURN 语句无条件终止查询、存储过程或批处理。
存储过程或批处理中 RETURN 语句后面的语句都不运行。当在存储过程中使用 RETURN 语句时。此语句能够指定返回给调用应用程序、批处理或过程的整数值。假设 RETURN 未指定值。则存储过程返回 0
5、WAITFOR 语句
WAITFOR 语句挂起批处理、存储过程或事务的运行,直到发生下面情况:
已超过指定的时间间隔。
到达一天中指定的时间。
指定的 RECEIVE 语句至少改动一行或并将其返回到 Service Broker 队列。
WAITFOR 语句由下列子句之中的一个指定:
DELAY keyword后为 time_to_pass,是指完毕 WAITFOR 语句之前等待的时间。完毕 WAITFOR 语句之前等待的时间最多为 24 小时。
如:
WAITFOR DELAY ‘00:00:02‘
SELECT EmployeeID FROM Employee;
TIME keyword后为 time_to_execute,指定 WAITFOR 语句完毕所用的时间。
GO
BEGIN
WAITFOR TIME ‘22:00‘;
DBCC CHECKALLOC;
END;
GO
RECEIVE 语句子句,从 Service Broker 队列检索一条或多条消息。使用 RECEIVE 语句指定 WAITFOR 时。假设当前未显示不论什么消息。该语句将等待消息到达队列。
TIMEOUT keyword后为 timeout,指定 Service Broker 等待消息到达队列的时间长度(毫秒)。
能够在 RECEIVE 语句或 GET CONVERSATION GROUP 语句中指定 TIMEOUT。
6、WHILE...BREAK 或 CONTINUE 语句
仅仅要指定的条件为 True 时,WHILE 语句就会反复语句或语句块。REAK 或 CONTINUE语句通常和WHILE一起使用。BREAK 语句退出最内层的 WHILE 循环,CONTINUE 语句则又一次開始 WHILE 循环。
ERROR_NUMBER() 返回错误号。
ERROR_PROCEDURE()。返回出现错误的存储过程或触发器的名称。假设在存储过程或触发器中未出现错误,该函数返回 NULL。
ERROR_SEVERITY() 返回严重性。
ERROR_STATE()。返回状态。
2、在运行不论什么 Transact-SQL 语句之后,您能够马上使用 @@ERROR 函数測试错误并检索错误号。
RAISERROR
RAISERROR 用于将与 SQL Server Database Engine 生成的系统错误或警告消息使用同样格式的消息返回到应用程序中。
3、PRINT
PRINT 语句用于将消息返回到应用程序。
PRINT 採用字符或 Unicode 字符串表达式作为參数,并将字符串作为消息返回到应用程序。
标签:encrypt 批处理 sql spec timeout 逻辑 where 格式 多次
原文地址:http://www.cnblogs.com/tlnshuju/p/7118287.html