SQLSERVER SQL编程集合 (part 1)

原创 2007年10月01日 19:37:00
/////////////////////////////////////变量的使用

/*变量声明方法*/

(
1)

DECLARE @customer_count INT@total_sales REAL@best_sales DATETIME

(
2)

DECLARE @customer_count INT

 

/*变量赋值方法*/

(
1)

SET @customer_count = 0

(
2)

SELECT @customer_count = 0

(
3)

DECLARE @total_id  CHAR(6)

SELECT @total_id = stor_id FROM discounts

 

/////////////////////////////////////函数

CREATE FUNCTION ufn_getDiscount(@stor_id char(4))

RETURNS REAL

BEGIN

RETURN (SELECT discount FROM discounts WHERE stor_id = @stor_id)

END

 

SELECT lowqty, dbo.ufn_getDiscount(stor_id)/*函数返回单值时在调用是必须加拥有者名字*/

FROM discounts

WHERE dbo.ufn_getDiscount(stor_id) > 6

 

/*RETURNS 对返回表进行描述*/

CREATE FUNCTION ufn_getDiscountsInfo(@stor_id char(4))

RETURNS @info_table TABLE

(

info_lowqty  
INT,

highqty      
INT,

discount     
INT 

)

BEGIN

INSERT @info_table SELECT Lowqty, highqty, discOunt FROM discounts

                  
WHERE stor_id = @stor_id

RETURN

END

 

SELECT discount FROM ufn_getDiscountsInfo(8042)

 

 

 

////////////////////////////////////////存储过程

CREATE PROCEDURE usp_add_coder

@name        VARCHAR(30),

@address     VARCHAR(30),

@office      INT = 1,  /*初值=1*/

@manager     INT = 1

AS

INSERT INTO coder(name, address, office, manager)

VALUES (@name@address@office@manager)

 

EXECUTE usp_add_coder 'ckcs''福建'12

 

 

////////////////////////////////////////触发器

CREATE TRIGGER tri_update_order ON orders

FOR UPDATE

AS

DECLARE @rowcount int

SET @rowcount = @@rowcount

IF (UPDATE(EmployeeID) OR UPDATE(Freight))  /*只要有更新EmployeeID或Freight的值触发器将被触动*/

BEGIN

IF (@rowcount > 1)

BEGIN

ROLLBACK TRANSACTION

RAISERROR('每次更新只能更新一条记录'162)

END

ELSE BEGIN

UPDATE employee_2 SET salary = salary - 

  (
SELECT Freight FROM DELETED WHERE (employee_2.emp_id = (SELECT EmployeeID FROM DELETED)))

END

END

 

CREATE TRIGGER tri_delete_employee ON employee

FOR DELETE

AS

IF @@rowcount > 1  /*判断操作是否影响到两行*/

BEGIN 

ROLLBACK TRANSACTION

RAISERROR('你不能同时删除两个雇员'162)

END

ELSE BEGIN

UPDATE employee_1 SET NAME = 'jinlp' 

  
WHERE emp_id = (SELECT employee_id FROM DELETED)

UPDATE employee_2 SET NAME = 'jinlp2'

  
WHERE emp_id = (SELECT employee_id FROM DELETED) 

END

 

/*类型(1)@checking_balance和@loc_balance在存储过程里面定义*/

/*存储过程的定义*/

CREATE PROCEDURE usp_process_check

@account_number  INT,

@check_number    INT,

@check_amount    INT,

@checking_balance   REAL OUTPUT,

@loc_used           REAL OUTPUT,

@loc_balance        REAL OUTPUT

AS

SET @loc_used = 0  /*设置处始值*/

SELECT @checking_balance = check_balance FROM customers  /*对@checking_balance进行赋值*/

                            
WHERE account_number = @account_number

SELECT @loc_balance = (SELECT loc_balance FROM customers

                       
WHERE account_number = @account_number)

IF  @checking_balance < @check_amount

SET @loc_used = (@check_amount - @checking_balance)

SET @checking_balance = @checking_balance - @check_amount + @loc_used

INSERT INTO checks 

   
VALUES(@account_number@check_number@check_amount)

UPDATE customers SET loc_balance = @loc_balance, checking_balance = @checking_balance

   
WHERE account_number = @account_number

 

 

/////////////////////////////////建立数据库

CREATE DATABASE home_database

ON

(

NAME 
= 'MYhome_data',

FILENAME 
= 'e:database backupMYhome_data.mdf',

SIZE 
= 10MB,

MAXSIZE 
= 15MB, /*或是使用unlimited*/

FILEGROWTH 
= 1MB 

)

LOG ON

(

NAME 
= 'MYhome_log',

FILENAME 
= 'e:database backupMYhome_log.log',

SIZE 
= 3MB,

MAXSIZE 
= 6MB,

FILEGROWTH 
= 1MB

)

 

//////////////////////////////////游标

 

DECLARE cur_payroll_work_3 SCROLL CURSOR

FOR SELECT * FROM orders  -- MS-SQL强制把 SCROLL 游标设为 READONLY

 

OPEN cur_payroll_work_3  -- 使用数据填充游标

 

FETCH NEXT FROM cur_payroll_work_3 -- 下一行

 

FETCH PRIOR FROM cur_payroll_work_3  -- 上一行

 

FETCH FIRST FROM cur_payroll_work_3 -- 第一行

 

FETCH LAST FROM cur_payroll_work_3 -- 最后一行

 

FETCH RELATIVE 1 FROM cur_payroll_work_3

 

FETCH RELATIVE -1 FROM cur_payroll_work_3

 

FETCH ABSOLUTE 1 FROM cur_payroll_work_3  --第1行

 

FETCH ABSOLUTE -1 FROM cur_payroll_work_3  --倒数第一行

 

--CLOSE 将释放游标占有的资源,但是游标在当前会话中仍然存在。

CLOSE cur_payroll_work_3

 

--deallocate会消毁游标,执行它后游标不再存在。

DEALLOCATE cur_payroll_work_3

 

-- MS-SQL强制把 SCROLL 游标设为 READONLY 可使用DYNAMIC游标实现可更改的游-- 标

DECLARE  cur_orders_4  CURSOR DYNAMIC 

FOR SELECT * FROM orders

FOR UPDATE OF ShipAddress, ShipVia

OPEN cur_orders_4

 

FETCH RELATIVE 1 FROM cur_orders_4  --可回滚

 

DELETE FROM orders WHERE CURRENT OF cur_orders_4  --可更新

 

UPDATE orders SET ShipAddress = '福建' WHERE CURRENT OF cur_orders_4  --可更新

这是我在学习SQL编程时对一些常见的SQL语句的摘录和总结,希望对你有些帮助,主要是针对MS SQLSERVER编程.
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Delphi操作Word的几个知识点

//-------------------初始化-------------------- var  wApp,work:Variant;  try   wApp:=GetActiveOleObject...
  • ghy412
  • ghy412
  • 2005-04-07 10:07
  • 1100

JAVA学习笔记(十五)-Eclipse自定义编码格式

Eclipse自定义编码格式与快捷键1.在Eclipse的主界面称之为透明视图,每一个独立的窗口称为视图,视图可通过右上角菜单的open Perspective来打开新的工作视图,也可以通过主菜单栏的...

JAVA中自定义日志输出格式及自定义文件处理器的实现

在使用JAVA的日志记录功能时,我们通过java.util.logging.Logger对象来记录特定系统或应用程序组件的日志消息 。在记录日志时它使用java.util.logging.Handle...
  • ckcs49
  • ckcs49
  • 2008-02-19 23:51
  • 11261

源码-PL/SQL从入门到精通-第十七章-面向对象编程-Part 1

原来PL/SQL也支持面向对象编程,有了Java基础,这章不难理解。 有个问题:对象定义真不支持布尔类型? 我的Java程序中布尔型可是很常用的啊。不过肯定有其他的替代解决方案吧 --第17章开始...

源码-Oracle数据库管理-第十四章-记录与集合-Part 1(使用PL/SQL记录)

记录:单行多列 集合:多行单列 这样说,确实简单明了啊 --第14章 记录与集合 --14.1 使用PL/SQL记录 --代码14.1 使用记录的PL/SQL语句块示例 DECLARE -...

源码-PL/SQL从入门到精通-第八章-记录与集合-Part 1

--第8章开始 --代码8.1 不使用记录的PL/SQL语句块示例 DECLARE --定义保存字段值的变量 v_empno NUMBER; v_ename VARCHAR2...

SQL编程实用大全精华版part1

  • 2011-04-01 22:55
  • 14.53MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)