博文
怎样让SQL只显示用户表(2006-04-15 08:43:00)
摘要:在SQL Server中,当建立一个数据库后,就存在一些系统表。如果用户建立的用户表较多时,为了浏览和操作的方便,可以将系统表隐藏起来,只显示用户表。
操作方法为:
打开你的企业管理器-->MICROSOFT SQL SERVER-->SQL SERVER组-->数据库实例(可能会是你的机器名,例如:MYCOMPUTER(WINDOWS NT))-->编辑SQL Server注册属性-->把“显示系统数据库和系统对象”前的勾去掉。这样,打开数据库表,就只显示用户表了!......
MySQL 5.0 新特性教程 存储过程:第四讲(2006-04-15 08:40:00)
摘要:Error Handling 异常处理 好了,我们现在要讲的是异常处理
1. Sample Problem: Log Of Failures 问题样例:故障记录 当INSERT失败时,我希望能将其记录在日志文件中我们用来展示出错处理的问题样例是很普通的。我希望得到错误的记录。当INSERT失败时,我想在另一个文件中记下这些错误的信息,例如出错时间,出错原因等。我对插入特别感兴趣的原因是它将违反外键关联的约束2. Sample Problem: Log Of Failures (2)mysql> CREATE TABLE t2s1 INT, PRIMARY KEY (s1))engine=innodb;//mysql> CREATE TABLE t3 (s1 INT, KEY (s1),FOREIGN KEY (s1) REFERENCES t2 (s1))engine=innodb;//mysql> INSERT INTO t3 VALUES (5);//...ERROR 1216 (23000): Cannot add or update a child row: a foreign keyconstraint fails(这里显示的是系统的出错信息) 我开始要创建一个主键表,以及一个外键表。我们使用的是InnoDB,因此外键关联检查是打开的。然后当我向外键表中插入非主键表中的值时,动作将会失败。当然这种条件下可以很快找到错误号1216。3. Sample Problem: Log Of FailuresCREATE TABLE error_log (error_messageCHAR(80))//
下一步就是建立一个在做插入动作出错时存储错误的表。
4. Sample Problem: Log Of ErrorsCREATE PROCEDURE p22 (parameter1 INT)BEGINDECLARE EXIT HANDLER FOR 1216INSERT INTO error_log VALUES(CONCAT('Time: ',current_date,'. Foreign Key Reference Failure ForValue = ',parameter1));INSERT INTO t3 VALUES......
MySQL 5.0 新特性教程 存储过程:第三讲(2006-04-15 08:37:00)
摘要:The New SQL Statements 新SQL语句Variables 变量 在复合语句中声明变量的指令是DECLARE。 (1) Example with two DECLARE statements 两个DECLARE语句的例子
CREATE PROCEDURE p8 ()BEGINDECLARE a INT;DECLARE b INT;SET a = 5;SET b = 5;INSERT INTO t VALUES (a);SELECT s1 * a FROM t WHERE s1 >= b;END; // /* I won't CALL this */ 在过程中定义的变量并不是真正的定义,你只是在BEGIN/END块内定义了而已(译注:也就是形参)。注意这些变量和会话变量不一样,不能使用修饰符@你必须清楚的在BEGIN/END块中声明变量和它们的类型。 变量一旦声明,你就能在任何能使用会话变量、文字、列名的地方使用。 (2) Example with no DEFAULT clause and SET statement 没有默认子句和设定语句的例子
CREATE PROCEDURE p9 ()BEGINDECLARE a INT /* there is no DEFAULT clause */;DECLARE b INT /* there is no DEFAULT clause */;SET a = 5; /* there is a SET statement */SET b = 5; /* there is a SET statement */INSERT INTO t VALUES (a);SELECT s1 * a FROM t WHERE s1 >= b;END; // /* I won't CALL this */ 有很多初始化变量的方法。如果没有默认的子句,那么变量的初始值为NULL。你可以在任何时候使用SET语句给变量赋值。 (3) Example with DEFAULT clause 含有DEFAULT子句的例子
CREATE PROCEDURE p10 ()BEGINDECLARE a, b INT DEFAULT 5;INSERT INTO t VALUES (a);SELECT ......
MySQL 5.0 新特性教程 存储过程:第二讲(2006-04-15 08:33:00)
摘要:Why MySQL Statements are Legal in a Procedure Body 什么MySQL语句在存储过程体中是合法的?
什么样的SQL语句在Mysql存储过程中才是合法的呢?你可以创建一个包含INSERT, UPDATE,DELETE, SELECT, DROP, CREATE, REPLACE等的语句。你唯一需要记住的是如果代码中包含MySQL扩充功能,那么代码将不能移植。在标准SQL语句中:任何数据库定义语言都是合法的,如:
CREATE PROCEDURE p () DELETE FROM t; // SET、COMMIT以及ROLLBACK也是合法的,如:
CREATE PROCEDURE p () SET @x = 5; // MySQL的附加功能:任何数据操作语言的语句都将合法。
CREATE PROCEDURE p () DROP TABLE t; // MySQL扩充功能:直接的SELECT也是合法的:
CREATE PROCEDURE p () SELECT 'a'; // 顺便提一下,我将存储过程中包括DDL语句的功能称为MySQL附加功能的原因是在SQL标准中把这个定义为非核心的,即可选组件。在过程体中有一个约束,就是不能有对例程或表操作的数据库操作语句。例如下面的例子就是非法的:
CREATE PROCEDURE p1 ()CREATE PROCEDURE p2 () DELETE FROM t; // 下面这些对MySQL 5.0来说全新的语句,过程体中是非法的:
CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, CREATE FUNCTION,DROP FUNCTION, CREATE TRIGGER, DROP TRIGGER. 不过你可以使用
CREATE PROCEDURE db5.p1 () DROP DATABASE db5// 但是类似
"USE database" 语句也是非法的,因为MySQL假定默认数据库就是过程的工作场所。 Call the Procedure 调用存储过程 1. 现在我们就可以调用一个存储过程了,你所需要输入的全部就是CALL和你过程名以及一个括号再一次强调,括号是必须的当你......
MySQL 5.0 新特性教程 存储过程:第一讲(2006-04-15 08:31:00)
摘要:Introduction 简介
MySQL 5.0 新特性教程是为需要了解5.0版本新特性的MySQL老用户而写的。简单的来说是介绍了“存储过程、触发器、视图、信息架构视图”,在此感谢译者陈朋奕的努力.希望这本书能像内行专家那样与您进行对话,用简单的问题、例子让你学到需要的知识。为了达到这样的目的,我会从每一个细节开始慢慢的为大家建立概念,最后会给大家展示较大的实用例,在学习之前也许大家会认为这个用例很难,但是只要跟着课程去学,相信很快就能掌握。
Conventions and Styles 约定和编程风格
每次我想要演示实际代码时,我会对mysql客户端的屏幕就出现的代码进行调整,将字体改成Courier,使他们看起来与普通文本不一样。
在这里举个例子:mysql> DROP FUNCTION f;Query OK, 0 rows affected (0.00 sec)
如果实例比较大,则需要在某些行和段落间加注释,同时我会用将“ <--”符号放在页面的右边以表示强调。
例如:
mysql> CREATE PROCEDURE p ()-> BEGIN/* This procedure does nothing */ <---> END;//Query OK, 0 rows affected (0.00 sec)
有时候我会将例子中的"mysql> "和"-> "这些系统显示去掉,你可以直接将代码复制到mysql客户端程序中(如果你现在所读的不是电子版的,可以在mysql.com网站下载相关脚本)所以的例子都已经在Suse 9.2 Linux、Mysql 5.0.3公共版上测试通过。
在您阅读本书的时候,Mysql已经有更高的版本,同时能支持更多OS了,包括Windows,Sparc,HP-UX。因此这里的例子将能正常的运行在您的电脑上。但如果运行仍然出现故障,可以咨询你认识的资深Mysql用户,以得到长久的支持和帮助。
所以存储过程是可复用的组件!想象一下如果你改变了主机的语言,这对存储过程不会产生影响,因为它是数据库逻辑而不是应用程序。存储过程是可以移植的!当你用SQL编写存储过程时,你就知道它可以运行在Mysql支持的任何平台上,不需要你额外添加运行环境包,也不需要为程序在......
存储过程中的循环语句(2006-04-15 08:10:00)
摘要:存储过程中的循环语句
WHILE设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。
语法WHILE Boolean_expression { sql_statement | statement_block } [ BREAK ] { sql_statement | statement_block } [ CONTINUE ]
参数Boolean_expression
返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来。
{sql_statement | statement_block}
Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字 BEGIN 和 END。
BREAK
导致从最内层的 WHILE 循环中退出。将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束标记。
CONTINUE
使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句。
注释如果嵌套了两个或多个 WHILE 循环,内层的 BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。
示例A. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE在下例中,如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高......
ADO记录集和水晶报表(转)(2006-04-11 10:20:00)
摘要:在使用水晶报表时,经常会感到数据不是很好控制,最后只好使用这个终极绝招咯。那就是使用数据定义文件(TTX),把得到的ADO记录集传送给水晶报表。通常情况下,水晶报表是从物理的数据库上创建出来的,但是现在有了32位的Active Data Driver-- P2smon.dll,水晶就可以不用再事先连接到一个数据库上咯。首先,需要创建一个TTX文件,进入数据源选择窗体后,如下图选中再单击了前面的“+”后弹出数据源窗体此时,我们使用“New”按钮创建一个新的数据定义文件(TTX),格式如下保存后,我们打开这个文本文件,就会发现TTX文件的格式,原来中间是TAB分割符来的。接着,我们就按照水晶报表的老套路画式样,剩下的就是传递记录机集了。下面,我们要声明好传递ADO记录集需要的Api,Public Declare Function PEOpenEngine Lib "crpe32.dll" () As IntegerPublic Declare Function PEGetErrorCode Lib "crpe32.dll" (ByVal printJob As Integer) As IntegerPublic Declare Function PEOpenPrintJob Lib "crpe32.dll" (ByVal RptName As String) As IntegerPublic Declare Function PEOutputToWindow Lib "crpe32.dll" ( _ByVal printJob As Integer, _ByVal Title As String, _ByVal Left As Long, _ByVal&nbs......
SQLServer的日期处理--(1)(2006-04-11 10:19:00)
摘要:1.首先获取日期 “开始”-〉“所有程序”-〉“MircoSoft SQLServer”-〉“查询分析器” 在查询分析器里面输入:Select GetDate() 可以获得当前数据库的时间.2.使其格式化输出 例如你只想获得年份:可以用函数YEAR() PS --大小写不要紧 Select YEAR(GetDate()) as year PS--跟在as后面是列名 例如你只想获得月份:可以用函数month() Select month(GetDate()) as month 例如你只想获得某日期:可以用函数day() Select day(GetDate()) as day如果你使用的是DELPHI 则用Adoquery1.FieldByNae("day" .AsString就可以获得今天是什么日子如果你使用的是C# 则用.DataRow("day" .ToString()就可以获得今天是什么日子,在程序上面显示出来......
.NET开发中的一些小技巧 (2006-04-11 10:17:00)
摘要:这篇文章来自是Mukund Pujari的《Some Cool Tips for .NET》,本人给大家翻译总结一下,我英语水平也就那么回事,不合适的地方还是请大家提出来。1. 如何创建一个可改变大小没有标题栏的窗体?(How to create a form with resizing borders and no title bar?)form1.Text = string. Empty; form1.ControlBox = false;2. 如何在.NET的Windows窗体上启用XP主题集?(How to use XP Themes with Windows Forms using the .NET?)确认你的控件中FlatStyle属性已经修改为System,再修改Main方法。static void Main() { Application.EnableVisualStyles(); Application.DoEvents(); Application. Run(new Form1()); } 3. 如何为一个窗体设置一个默认按钮?(How to set the default button for a form?)form1.AcceptButton = button1;4. 如何为一个窗体设置一个取消按钮?(How to set the Cancel button for a form?)form1.CancelButton = butto......
c#.net常用函数列表(2006-04-11 10:15:00)
摘要:1、DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; 1.2 取当前年 int 年=currentTime.Year; 1.3 取当前月 int 月=currentTime.Month; 1.4 取当前日 int 日=currentTime.Day; 1.5 取当前时 int 时=currentTime.Hour; 1.6 取当前分 int 分=currentTime.Minute; 1.7 取当前秒 int 秒=currentTime.Second; 1.8 取当前毫秒 int 毫秒=currentTime.Millisecond; (变量可用中文) 1.9 取中文日期显示——年月日时分 string strY=currentTime.ToString("f"; //不显示秒 1.10 取中文日期显示_年月 string strYM=currentTime.ToString("y"; 1.11 取中文日期显示_月日 string strMD=currentTime.ToString("m"; 1.12 取当前年月日,格式为:2003-9-23 string strYMD=currentTime.ToString("d"; 1.13 取当前时分,格式为:14:24 string strT=currentTime.ToString("t"; 2、Int32.Parse(变量) Int32.Parse("常量" ......
