oracle学习笔记——sql脚本范例

1、创建表的脚本范例
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N’[DIMRoles]’) AND xtype = ‘U’)

BEGIN

CREATE TABLE [DIMRoles](

[Key] [int] NOT NULL,

[Name] [nvarchar](256) NOT NULL,

PRIMARY KEY CLUSTERED

(

[Key] ASC

) ON [PRIMARY],

UNIQUE NONCLUSTERED

(

[Name] ASC

) ON [PRIMARY]

) ON [PRIMARY]

END

注意事项:

A、一定要先判断表是否存在,不存在才创建,而不能存在删除原表进行新表创建,重复执行会导致客户数据丢失!

2、修改表范例
2.1增加字段,增加控制(索引,不能为空等等)
IF NOT exists(select * from syscolumns where id=object_id(‘DIMUsers’) and name=’Phone’)

BEGIN

ALTER TABLE dbo.DIMUsers ADD Phone NVARCHAR(20) NOT NULL DEFAULT(”)

END

注意事项:

A、一定要判断字段是否存在表,不存在才创建。

B、一定看清楚判断的字段和表是否一样,不要上面判断A表,下面修改B表。

2.2修改删除字段
修改:

IF exists(select * from syscolumns where id=object_id(‘DIMUsers’) and name=’Phone’)

BEGIN

ALTER TABLE dbo.DIMUsers ALTER COLUMN Phone NVARCHAR(50)

END

删除:

IF exists(select * from syscolumns where id=object_id(‘DIMUsers’) and name=’Phone’)

BEGIN

ALTER TABLE dbo.DIMUsers DROP COLUMN Phone

END

注意事项:

A、一定要判断表的字段存在,不存在的话不存在修改和删除的意义。

3、初始化表数据范例
注意事项:

1、切勿使用delete 你要插入的表没有加上条件。

2、如果自增长字段最好关闭自增长,然后删除先插入你要加入到这张表的数据,因为这个ID是固定的。

SET IDENTITY_INSERT DIMUsers ON

DELETE FROM DIMUsers WHERE [Key] IN(1,2,3,4);

INSERT INTO DIMUsers ([Key], [Name], Password, Type, Nickname, UpperName, RegisterTime)

values (1, N’sa’, N’123’, 0, N’系统管理员’, N’SA’, getdate());

INSERT INTO DIMUsers ([Key], [Name], Password, Type, Nickname, UpperName, RegisterTime)

values (2, N’administrator’, N”, 0, N’系统管理员’, N’ADMINISTRATOR’, getdate());

INSERT INTO DIMUsers ([Key], [Name], Password, Type, Nickname, UpperName, RegisterTime)

values (3, N’admin’, N’123’, 0, N’系统管理员’, N’ADMIN’, getdate());

INSERT INTO DIMUsers ([Key], [Name], Password, Type, Nickname, UpperName, RegisterTime)

values (4, N’public’, N”, 1, N’公共聊天室’, N’PUBLIC’, getdate());

SET IDENTITY_INSERT DIMUsers OFF

如果系统的主键不是自增长的最好办了,上面的例子是最难办的自增长例子。

4、修改函数、存储过程、视图、索引
注意事项:

A、因为这些东西重复更新的话可以删除原来的保证最新的就可以,所以只需要判断是否存在即可。

函数示例:

IF OBJECT_ID(‘FUN_GetChildList’) IS NOT NULL

DROP FUNCTION FUN_GetChildList

GO

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

CREATE FUNCTION [dbo].[FUN_GetChildList] (

@Table Nvarchar(100),

@Value Nvarchar(100)

)

RETURNS @tResult TABLE (

– 定义结果表

RESULT Nvarchar(100)

)

AS

BEGIN

– 子类型表、父类型表、子类型数

DECLARE @tChild TABLE(RESULT Nvarchar(100))

DECLARE @tFather TABLE(RESULT Nvarchar(100))

DECLARE @Count SmallInt

– 预先置传入的值到@tFather中

INSERT INTO @tFather

VALUES (@Value)

WHILE 1 = 1

BEGIN

– 循环中,先将@tFather中内容放到@tResult中;

INSERT INTO @tResult SELECT RESULT FROM @tFather

– 将@tChild清空,再取@tFather的所有子类型到@tChild中;

DELETE FROM @tChild

– 根据不同的表追加写到IF内部的语句


IF @Table ='DIMDEPT'

BEGIN

  INSERT INTO @tChild

  SELECT RESULT = did

  FROM DIMDEPT

  WHERE pdid IN (SELECT RESULT FROM @tFather)

END

– 当@tChild空时,退出;

  SELECT @Count = COUNT(*) FROM @tChild

  IF @Count = 0

  BREAK

– 将@tFather清空,并将@tChild中内容给@tFather。

  DELETE FROM @tFather

  INSERT INTO @tFather SELECT RESULT FROM @tChild     

END

RETURN

END

存储过程示例:

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N’[DIMAddFriend]’) AND OBJECTPROPERTY(id,N’IsProcedure’) = 1)

DROP PROC DIMAddFriend

GO

create proc [dbo].[DIMAddFriend](@user nvarchar(256), @friend nvarchar(256))

as

begin

insert into DIMUserRelationship (HostKey,GuestKey,Relationship,RenewTime)

select host.[Key] as HostKey,guest.[Key] as GuestKey,0,getdate()

from DIMUsers host,DIMUsers guest

where

   (host.UpperName=upper(@user) or host.UpperName=upper(@friend)) and

   (guest.UpperName=upper(@friend) or guest.UpperName=upper(@user)) and

   host.[Key]<>guest.[Key]

end

视图示例:

由于视图判断没有办法所以版本统一,所以写了2个版本。

2005以上版本:

IF EXISTS (SELECT * FROM sys.views WHERE OBJECT_ID=OBJECT_ID(N’VB_AccountPayableDetail’) )

DROP VIEW VB_AccountPayableDetail

go

CREATE VIEW VB_AccountPayableDetail

AS

SELECT

  A.COMPANY_ID,

  A.ACCOUNT_PAYABLE_ID,

  A.SNO,

  A.MATERIAL_ID,

  A.MATERIAL_NO,

  A.MATERIAL_NAME,

  A.MATERIAL_SPECIFICATION,

  A.CURRENCY_ID,

  EXCHANGE_RATE =  CAST(A.EXCHANGE_RATE AS NUMERIC(18,2)),

  A.UNIT_ID,

  QUANTITY = CAST(A.QUANTITY AS NUMERIC(18,2)),

  UNIT_PRICE = CAST(A.UNIT_PRICE AS NUMERIC(18,2)),

  TAX_RATE = CAST(A.TAX_RATE AS NUMERIC(18,2)),

  AMOUNT = CAST(A.AMOUNT AS NUMERIC(18,2)),

  A.REMARK,

  CURRENCY = B.NAME,

  UNIT = C.NAME

FROM ACCOUNT_PAYABLE_ITEM A

  LEFT JOIN S_CODELIB B

   ON A.COMPANY_ID = B.COMPANY_ID

   AND A.CURRENCY_ID = B.ID

   LEFT JOIN S_CODELIB C

   ON A.COMPANY_ID = C.COMPANY_ID

   AND A.UNIT_ID = C.ID

2000版本:

IF EXISTS (SELECT * FROM sysviews WHERE OBJECT_ID=OBJECT_ID(N’VB_AccountPayableDetail’) )

DROP VIEW VB_AccountPayableDetail

go

CREATE VIEW VB_AccountPayableDetail

AS

SELECT

  A.COMPANY_ID,

  A.ACCOUNT_PAYABLE_ID,

  A.SNO,

  A.MATERIAL_ID,

  A.MATERIAL_NO,

  A.MATERIAL_NAME,

  A.MATERIAL_SPECIFICATION,

  A.CURRENCY_ID,

  EXCHANGE_RATE =  CAST(A.EXCHANGE_RATE AS NUMERIC(18,2)),

  A.UNIT_ID,

  QUANTITY = CAST(A.QUANTITY AS NUMERIC(18,2)),

  UNIT_PRICE = CAST(A.UNIT_PRICE AS NUMERIC(18,2)),

  TAX_RATE = CAST(A.TAX_RATE AS NUMERIC(18,2)),

  AMOUNT = CAST(A.AMOUNT AS NUMERIC(18,2)),

  A.REMARK,

  CURRENCY = B.NAME,

  UNIT = C.NAME

FROM ACCOUNT_PAYABLE_ITEM A

  LEFT JOIN S_CODELIB B

   ON A.COMPANY_ID = B.COMPANY_ID

   AND A.CURRENCY_ID = B.ID

   LEFT JOIN S_CODELIB C

   ON A.COMPANY_ID = C.COMPANY_ID

   AND A.UNIT_ID = C.ID

索引示例:

if NOT exists(select * from sysindexes where name=’IX_mis_AskForLeaveSheetFact_001’)

BEGIN

CREATE NONCLUSTERED INDEX [IX_mis_AskForLeaveSheetFact_001] ON [dbo].[mis_AskForLeaveSheetFact]

(

[begin_date] ASC,

[begin_time] ASC

)

INCLUDE ( [Fact_leave_id],

[e_id],

[end_date],

[end_time],

[holidayNo]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]

END

统计信息示例:

这个没有2000版本的只有2005版本

IF NOT EXISTS(SELECT NAME FROM sys.stats WHERE name=’pms_exam_emp_001’)

BEGIN

CREATE STATISTICS [pms_exam_emp_001] ON [dbo].[pms_exam_emp]([p_e_id], [e_type], [e_id])

END

这个统计信息是什么东东,这个玩意是跟索引配合的,在进行数据优化的时候很有用处。

以上脚本都要记住的就如果你要增加、修改、删除一个表,视图,函数,存储过程,索引,字段都必须判断是否存在。

5、关于脚本上传到svn的规范
1、文件命名规则:
A、每天建立一个文件夹

B、文件名称以设计的表名,字段名,函数,存储过程,日期时间,姓名

示例:doa_deletefield_BOM_alter_201109061105_wenjl.sql

存储过程名称+动作+时间+姓名

个人觉得加上时间比较好,这样可以有效避免存储过程函数等更改的先后问题。最好可以统一开发库。

卷序列号码为 00000030 4489:1826 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ 2.2.4 CONVERT在日期转换中的使用示例.sql │ │ 2.3.3 SET DATEFORMAT对日期处理的影响.sql │ │ 2.3.4 SET LANGUAGE对日期处理的影响示例.sql │ │ 2.4.1 日期格式化处理.sql │ │ 2.4.2 日期推算处理.sql │ │ 2.4.3 特殊日期加减函数.sql │ │ 2.5.1 查询指定日期段内过生日的人员.sql │ │ 2.5.2 生成日期列表的函数.sql │ │ 2.5.3 工作日处理函数(标准节假日).sql │ │ 2.5.3 工作日处理函数(自定义节假日).sql │ │ 2.5.4 计算工作时间的函数.sql │ │ │ └─其他 │ 交叉表.sql │ 任意两个时间之间的星期几的次数-横.sql │ 任意两个时间之间的星期几的次数-纵.sql │ 复杂年月处理.sql │ 统计--交叉表+日期+优先.sql │ ├─第03章 │ │ 3.2 各种字符串分拆处理函数.sql │ │ 3.3 各种字符串合并处理示例.sql │ │ 3.4.1 分段截取函数.sql │ │ 3.4.2 分段更新函数.sql │ │ 3.4.3 IP地址处理函数.sql │ │ 3.5.1 字符串比较函数.sql │ │ 3.5.2 字符串并集&交集处理示例.sql │ │ 3.5.3 字符串分拆并统计的处理示例.sql │ │ 3.5.5 字符串处理示例--列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并处理示例.sql │ │ 3.7.4 text与image字段转换处理示例.sql │ │ 3.7.5 ntext字段的REPLACE处理示例.sql │ │ │ └─其他 │ varbinary转换成字符串.sql │ 关键字搜索.sql │ 分解公式.sql │ 字符串分拆--格式化.sql │ 得到一个字符串在另一个字符串中出现的次数.sql │ 数字转换成十六进制.sql │ 比较第一与第二个字符串,是否有连续的5个字符相同.sql │ 生成查询的模糊匹配字符串.sql │ 简繁转换.sql │ 统计一个表中某个字符出现最多的字母.sql │ 非法字符串处理.sql │ ├─第04章 │ │ 4.1.5 在各种处理中应用排序规则的示例.sql │ │ 4.2.1 排序规则在拼音处理中的应用.sql │ │ 4.2.2 排序规则在全角与半角处理中的应用.sql │ │ │ └─其他 │ 生成GB2312汉字表.sql │ 生成GBK汉字表.sql │ 自动获取汉字笔画.sql │ ├─第05章 │ │ 5.1.1 SET IDENTITY_INSERT 中的几个问题.sql │ │ 5.1.1 修改标识值的示例.sql │ │ 5.1.1 标识列与普通列互相转换的示例.sql │ │ 5.2.1 查表法按日期生成流水号的示例.sql │ │ 5.2.1 查表法生成流水号的示例.sql │ │ 5.2.2 使用编号表按日期生成流水号的示例.sql │ │ 5.2.2 使用编号表生成流水号的示例.sql │ │ 5.2.3 生成纯字母随机编号的示例(仅大小或者小写).sql │ │ 5.2.3 生成纯字母随机编号的示例(大小写混合).sql │ │ 5.2.3 生成纯数字随机编号的示例.sql │ │ 5.3.2 融合了补号处理的编号生成处理示例.sql │ │ 5.3.3 使用UPDATE进行编号重排的处理示例.sql │ │ 5.3.3 使用临时表进行编号重排的处理示例.sql │ │ 5.3.3 使用子查询进行编号重排的处理示例.sql │ │ 5.3.3 名次查询的处理示例.sql │ │ 5.4.1 查询已用编号分布情况的示例(临时表法).sql │ │ 5.4.1 查询已用编号分布情况的示例(子查询法).sql │ │ 5.4.2 查询缺号分布情况的示例.sql │ │ 5.4.3 返回已用编号、缺号分布字符串的处理示例.sql │ │ 5.4.4 缺勤天数统计的处理示例.sql │ │ │ └─其他 │ -补位法.sql │ 以另一个表的字段做默认值.sql │ 以另一表的字段生成编号.sql │ 关联部门流水号.sql │ 十六进制.sql │ 学号.sql │ 开票统计--涉及到连号处理.sql │ 新编号查询示例(分类查询).sql │ 新编号查询示例.sql │ 日期流水号.sql │ 材料流水号.sql │ 流水号.sql │ 箱编号连号处理.sql │ 类别自动生成编号示例.sql │ 自已做标识列的例子.sql │ 触发器自动维护已用&未用编号.sql │ 连续编号.sql │ 防止重复的示例.sql │ 项目编号=各项目独立流水号&各年不同.sql │ ├─第06章 │ │ 6.1.1 NULL对IN的查询的影响及解决示例.sql │ │ 6.1.2 各种联接的使用示例.sql │ │ 6.1.2 多表联结导致记录重复的示例.sql │ │ 6.1.3 使用UNION实现库存报表的示例.sql │ │ 6.1.5 按指定上下限区间进行数据统计的示例.sql │ │ 6.1.6 随机出题的示例.sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(定义各汇总列标题).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序及汇总列标题处理).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例(带排序处理).sql │ │ 6.2.1 ROLLUP实现的分级汇总示例.sql │ │ 6.2.1 UNION ALL实现的分级汇总示例.sql │ │ 6.3.1 简单的交叉报表处理示例.sql │ │ 6.3.2 多列转换为行的交叉报表处理示例.sql │ │ 6.3.3 行值动态变化的交叉报表处理示例(转换多列).sql │ │ 6.3.3 行值动态变化的交叉报表处理示例.sql │ │ 6.3.4 化解字符串不能超过8000的方法.sql │ │ 6.3.5 特殊的交叉报表处理示例.sql │ │ 6.4.1 库存明细帐处理示例(包含结存数).sql │ │ 6.4.1 库存明细帐处理示例.sql │ │ 6.4.2 同期及上期数据对比处理示例.sql │ │ 6.4.3 动态分组处理示例.sql │ │ 6.4.4 排行榜处理示例.sql │ │ │ └─其他 │ 交叉表--复杂名次.sql │ 交叉表-优先级处理.sql │ 交叉表分析.sql │ 分级汇总.sql │ 分组交叉表.sql │ 列转行.sql │ 固定行列报表.sql │ 复杂交叉表.sql │ 复杂交叉表1.sql │ 多栏显示.sql │ 日期+星期+时间.sql │ 格式化报表.sql │ 横转竖-1.sql │ 横转竖-字段名.sql │ 横转竖-生成字段名.sql │ 横转竖.sql │ 行列互换的复杂交叉表.sql │ 限制列数的交叉表.sql │ ├─第07章 │ │ 7.1 splitpage.asp │ │ 7.2.1 TOP n 实现的通用分页存储过程.sql │ │ 7.2.2 字符串缓存实现的通用分页存储过程.sql │ │ 7.2.3 临时表缓存实现的通用分页存储过程.sql │ │ 7.2.4 使用系统存储过程实现的通用分页存储过程.sql │ │ 7.3.1 实现随机分页的通用分页存储过程.sql │ │ 7.3.2 根据分类表实现的分页存储过程.sql │ │ │ └─其他 │ sp_cursor.sql │ 基本方法.sql │ ├─第08章 │ │ 8.1.2 树形数据分级汇总示例.sql │ │ 8.1.3 树形数据编号重排的通用存储过程.sql │ │ 8.1.3 树形数据编号重排示例.sql │ │ 8.1.4 实现编码规则调整处理的通用存储过程.sql │ │ 8.1.4 生成编码规则调整处理T-SQL语句的函数.sql │ │ 8.1.5 删除节点处理的通用存储过程.sql │ │ 8.1.5 移动节点处理的通用存储过程.sql │ │ 8.2.2 树形数据层次显示处理示例.sql │ │ 8.2.2 树形数据广度排序处理示例.sql │ │ 8.2.2 树形数据深度排序处理示例(模拟单编号法).sql │ │ 8.2.2 树形数据深度排序处理示例(递归法).sql │ │ 8.2.3 查找指定节点的所有子节点的示例函数.sql │ │ 8.2.4 查找指定节点的所有父节点的示例函数.sql │ │ 8.2.5 校验插入指定结点是否导致编码循环的示例函数.sql │ │ 8.2.5 校验表中数据是否有循环编码的通用存储过程.sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例(借鉴方式排序法).sql │ │ 8.2.6 复制指定节点及其所有子节点到指定结点的处理示例.sql │ │ 8.2.7 实现删除指定结点及所有子节点的处理触发器.sql │ │ 8.2.8 逐级汇总示例(循环逐级累计法).sql │ │ 8.2.8 逐级汇总示例(用户定义函数法).sql │ │ 8.3.1 产品配件清单查询示例.sql │ │ 8.3.2 最短乘车路线查询示例.sql │ │ │ └─其他 │ xml菜单.sql │ 宝塔形数据的处理-1.sql │ 宝塔形数据的处理.sql │ 树形数据生成xml.sql │ ├─第09章 │ │ 9.1.3 访问外部数据源方法总结.sql │ │ 9.5.1 二进制文件存取示例(T-SQL).sql │ │ 9.5.1 二进制文件存取示例(VB&VBA).vbs │ │ a.txt │ │ Schema.ini │ │ │ └─其他 │ bcp-数据导入导出(全).sql │ bcp-数据导入导出-二进制文件.sql │ bcp-数据导出为文件.sql │ bcp表数据存为XML.sqlSQL Server到Oracle连接服务器的实现.sqlSQL Server到SQLBASE连接服务器的实现.sqlSQL Server到SYBASE连接服务器的实现.sqlsql导出mysql.sql │ textcopy实现文件存取.sql │ Vb程序实现文件存取.sql │ 导入文本文件时如何指定字段类型.sql │ 导出northwind中Employees的图像.sql │ 将某个目录上的Excel表,导入到数据库中.sql │ 数据导入导出基本方法.sql │ 用ASP上传&下载文件.sql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值