SQLServer存储过程设计与使用指南

需积分: 39 0 下载量 82 浏览量 更新于2024-09-11 收藏 274KB PDF 举报
本文主要介绍了在Microsoft SQL Server 2000环境中如何编写和设计存储过程。存储过程是Transact-SQL语言的重要组成部分,它可以封装复杂的业务逻辑,提高代码复用性和执行效率。以下是从标题和描述中提炼出的关键知识点: 1. 存储过程的创建: - 存储过程的设计灵活,几乎所有的Transact-SQL语句(除CREATE DEFAULT、CREATE TRIGGER、CREATE PROCEDURE、CREATE VIEW、CREATE RULE等)都可以包含在内。这意味着你可以使用它们来执行数据查询、更新、插入和删除操作。 2. 设计规则: - 存储过程内可以创建其他数据库对象,如临时表,但要注意这些对象的生命周期。如果在存储过程中创建,它们只在该过程执行期间存在,结束后自动消失。 - 被调用的存储过程可以访问第一个存储过程创建的所有对象,包括临时表,但远程存储过程不支持事务处理,因此对远程服务器的更改无法回滚。 - 参数的数量有限制,最大为2100个,而局部变量的数量则取决于可用内存,理论上可以非常大。 - 对于对象命名,如果没有明确指定用户,SELECT、INSERT等操作会默认使用存储过程所有者,而ALTER TABLE、CREATE TABLE等敏感操作需要明确指定所有者,以避免权限问题。 3. 权限管理: - 如果有多个用户使用存储过程,为了确保安全,对象的所有者应在语句中明确指定,特别是对于可能影响到其他用户的操作,如操作表结构或统计数据。 4. 性能与限制: - 存储过程的最大大小受可用内存限制,可达128MB,这对于大型复杂操作来说是必要的。 总结起来,编写和设计SQL Server的存储过程是一项细致的工作,需要遵循特定的语法和规则,同时考虑到权限管理和性能优化。正确使用存储过程可以显著提升数据库应用的效率和安全性。

请帮我为以下代码添加注释,并排版package T14; //Buffer.java public class Buffer { private int buffer = -1; // buffer缓冲区被producer 和 consumer 线程共享 private int occupiedBufferCount = 0; // 控制缓冲区buffers读写的条件边量 public synchronized void set( int value ) //place value into buffer { String name = Thread.currentThread().getName();//get name of thread that called this method // while there are no empty locations, place thread in waiting state while ( occupiedBufferCount == 1 ) { // output thread information and buffer information, then wait try { //System.err.println("Buffer full. "+ name + " waits." ); wait(); } // if waiting thread interrupted, print stack trace catch ( InterruptedException exception ) { exception.printStackTrace(); } } // end while buffer = value; // set new buffer value ++occupiedBufferCount; System.err.println(name + " writes " + buffer); notify(); // tell waiting thread to enter ready state } // end method set; releases lock on SynchronizedBuffer public synchronized int get() // return value from buffer { // for output purposes, get name of thread that called this method String name = Thread.currentThread().getName(); // while no data to read, place thread in waiting state while ( occupiedBufferCount == 0 ) { // output thread information and buffer information, then wait try { //System.err.println("Buffer empty. "+name + " waits." ); wait(); } catch ( InterruptedException exception ) { exception.printStackTrace(); } } // end while // indicate that producer can store another value , because consumer just retrieved buffer value --occupiedBufferCount; System.err.println( name + " reads " + buffer ); notify(); // tell waiting thread to become ready to execute return buffer; } // end method get; releases lock on SynchronizedBuffer }

2023-06-06 上传