﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-学习 学习 再学习-随笔分类-SQL SERVRER</title><link>http://www.blogjava.net/xlth2006/category/41960.html</link><description>学习才是唯一的出路</description><language>zh-cn</language><lastBuildDate>Fri, 12 Mar 2010 20:12:29 GMT</lastBuildDate><pubDate>Fri, 12 Mar 2010 20:12:29 GMT</pubDate><ttl>60</ttl><item><title>SQLServer2000发生错误1069（由于登陆失败而无法启动服务）的解决方案</title><link>http://www.blogjava.net/xlth2006/archive/2010/03/11/315191.html</link><dc:creator>铁猴</dc:creator><author>铁猴</author><pubDate>Thu, 11 Mar 2010 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/xlth2006/archive/2010/03/11/315191.html</guid><wfw:comment>http://www.blogjava.net/xlth2006/comments/315191.html</wfw:comment><comments>http://www.blogjava.net/xlth2006/archive/2010/03/11/315191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xlth2006/comments/commentRss/315191.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xlth2006/services/trackbacks/315191.html</trackback:ping><description><![CDATA[&nbsp;第一个错误"SQL Server 不存在或访问被拒绝"通常是最复杂的，错误发生的原因比较多，需要检查的方面也比较多。一般说来，有以下几种可能性：<font color="#cc0033"></font> <br />
　　1、SQL Server名称或IP地址拼写有误； <br />
<br />
　　2、服务器端网络配置有误； <br />
<br />
　　3、客户端网络配置有误。 <br />
<br />
　　要解决这个问题，我们一般要遵循以下的步骤来一步步找出导致错误的原因。 <br />
<br />
　　首先，检查网络物理连接： <br />
<br />
　　　ping ＜服务器IP地址＞ <br />
　 <br />
　　或者 <br />
<br />
　　　ping ＜服务器名称＞ <br />
<br />
　　如果 ping ＜服务器IP地址＞ 失败，说明物理连接有问题，这时候要检查硬件设备，如网卡、HUB、路由器等。还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的，比如 ISA Server。防火墙软件可能会屏蔽对 ping、telnet 等的响应，因此在检查连接问题的时候，我们要先把防火墙软件暂时关闭，或者打开所有被封闭的端口。 <br />
<br />
　　如果ping ＜服务器IP地址＞ 成功而 ping ＜服务器名称＞ 失败，则说明名字解析有问题，这时候要检查 DNS 服务是否正常。有时候客户端和服务器不在同一个局域网里面，这时候很可能无法直接使用服务器名称来标识该服务器，这时候我们可以使用HOSTS文件来进行名字解析，具体的方法是： <br />
<br />
　　1、使用记事本打开HOSTS文件（一般情况下位于C:\WINNT\system32\drivers\etc）. <br />
<br />
　　2、添加一条IP地址与服务器名称的对应记录，如： <br />
<br />
　　　　172.168.10.24 myserver <br />
<br />
　　也可以在 SQL Server 的客户端网络实用工具里面进行配置，后面会有详细说明。 <br />
<br />
　　其次，使用 telnet 命令检查SQL Server服务器工作状态： <br />
<br />
　　　telnet ＜服务器IP地址＞ 1433 <br />
<br />
　　如果命令执行成功，可以看到屏幕一闪之后光标在左上角不停闪动，这说明 SQL Server 服务器工作正常，并且正在监听1433端口的 TCP/IP 连接；如果命令返回"无法打开连接"的错误信息，则说明服务器端没有启动 SQL Server 服务，也可能服务器端没启用 TCP/IP 协议，或者服务器端没有在 SQL Server 默认的端口1433上监听。 <br />
<br />
　　接着，我们要到服务器上检查服务器端的网络配置，检查是否启用了命名管道，是否启用了 TCP/IP 协议等等。我们可以利用 SQL Server 自带的服务器网络使用工具来进行检查。 <br />
<br />
　　点击：程序 -＞ Microsoft SQL Server -＞ 服务器网络使用工具，打开该工具后看到的画面如下图所示： <br />
<br />
　　从这里我们可以看到服务器启用了哪些协议。一般而言，我们启用命名管道以及 TCP/IP 协议。 <br />
<br />
　　点中 TCP/IP 协议，选择"属性"，我们可以来检查 SQK Server 服务默认端口的设置，如下图所示： <br />
<br />
　　一般而言，我们使用 SQL Server 默认的1433端口。如果选中"隐藏服务器"，则意味着客户端无法通过枚举服务器来看到这台服务器，起到了保护的作用，但不影响连接。 <br />
<br />
　　检查完了服务器端的网络配置，接下来我们要到客户端检查客户端的网络配置。我们同样可以利用 SQL Server 自带的客户端网络使用工具来进行检查，所不同的是这次是在客户端来运行这个工具。 <br />
<br />
　　点击：程序 -＞ Microsoft SQL Server -＞ 客户端网络使用工具， 打开该工具后看到的画面如下图所示： <br />
<br />
　　从这里我们可以看到客户端启用了哪些协议。一般而言，我们同样需要启用命名管道以及 TCP/IP 协议。 <br />
<br />
　　点击 TCP/IP 协议，选择"属性"，可以检查客户端默认连接端口的设置，如下图所示。 <br />
<br />
　　该端口必须与服务器一致。 <br />
<br />
　　单击"别名"选项卡，还可以为服务器配置别名。服务器的别名是用来连接的名称，连接参数中的服务器是真正的服务器名称，两者可以相同或不同。如下图中，我们可以使用myserver来代替真正的服务器名称sql2kcn-02，并且使用网络库 Named Pipes。别名的设置与使用HOSTS文件有相似之处。 <br />
<br />
　　通过以上几个方面的检查，错误 1 发生的原因基本上可以被排除。下面我们再详细描述如何来解决错误 2。 <br />
<br />
　　当用户尝试在查询分析器里面使用sa来连接SQL Server，或者在企业管理器里面使用sa来新建一个SQL Server注册时，经常会遇到如图 2 所示的错误信息。该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式，因此用户无法使用SQL Server的登录帐户（如 sa ）进行连接。解决方法如下所示： <br />
<br />
　　1、 在服务器端使用企业管理器，并且选择"使用 Windows 身份验证"连接上 SQL Server； <br />
<br />
　　2、 展开"SQL Server组"，鼠标右键点击SQL Server服务器的名称，选择"属性"，再选择"安全性"选项卡； <br />
<br />
　　3、 在"身份验证"下，选择"SQL Server和 Windows "。 <br />
<br />
　　4、 重新启动SQL Server服务。 <br />
<br />
　　在以上解决方法中，如果在第 1 步中使用"使用 Windows 身份验证"连接 SQL Server 失败，那么我们将遇到一个两难的境地：首先，服务器只允许了 Windows 的身份验证；其次，即使使用了 Windows 身份验证仍然无法连接上服务器。这种情形被形象地称之为"自己把自己锁在了门外"，因为无论用何种方式，用户均无法使用进行连接。实际上，我们可以通过修改一个注册表键值来将身份验证方式改为 SQL Server 和 Windows 混合验证，步骤如下所示： <br />
<br />
　　1、点击"开始"-"运行"，输入regedit，回车进入注册表编辑器； <br />
<br />
　　2、依次展开注册表项，浏览到以下注册表键： <br />
<br />
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer] <br />
<br />
　　3、在屏幕右方找到名称"LoginMode"，双击编辑双字节值； <br />
<br />
　　4、将原值从1改为2，点击"确定"； <br />
<br />
　　5、关闭注册表编辑器； <br />
<br />
　　6、重新启动SQL Server服务。 <br />
<br />
　　此时，用户可以成功地使用sa在企业管理器中新建SQL Server注册，但是仍然无法使用Windows身份验证模式来连接SQL Server。这是因为在 SQL Server 中有两个缺省的登录帐户：BUILTIN\Administrators 以及 ＜机器名＞\Administrator 被删除。要恢复这两个帐户，可以使用以下的方法： <br />
<br />
　　1、打开企业管理器，展开服务器组，然后展开服务器； <br />
<br />
　　2、展开"安全性"，右击"登录"，然后单击"新建登录"； <br />
<br />
　　3、在"名称"框中，输入 BUILTIN\Administrators； <br />
<br />
　　4、在"服务器角色"选项卡中，选择"System Administrators" ； <br />
<br />
　　5、点击"确定"退出； <br />
<br />
　　6、使用同样方法添加 ＜机器名＞\Administrator 登录。 <br />
<br />
　　以下注册表键 <br />
<br />
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode <br />
<br />
　　的值决定了SQL Server将采取何种身份验证模式。该值为1，表示使用Windows 身份验证模式；该值为2，表示使用混合模式（Windows 身份验证和 SQL Server 身份验证）。 <br />
<br />
　　看完如何解决前两个错误的方法之后，让我们来看一下如图 3 所示的第三个错误。 <br />
<br />
　　如果遇到第三个错误，一般而言表示客户端已经找到了这台服务器，并且可以进行连接，不过是由于连接的时间大于允许的时间而导致出错。这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器，并且是慢速连接时，有可能会导致以上的超时错误。有些情况下，由于局域网的网络问题，也会导致这样的错误。 <br />
<br />
　　要解决这样的错误，可以修改客户端的连接超时设置。默认情况下，通过企业管理器注册另外一台SQL Server的超时设置是 4 秒，而查询分析器是 15 秒（这也是为什么在企业管理器里发生错误的可能性比较大的原因）。具体步骤为： <br />
<br />
　　1、在企业管理器中，选择菜单上的"工具"，再选择"选项"； <br />
<br />
　　2、在弹出的"SQL Server企业管理器属性"窗口中，点击"高级"选项卡； <br />
<br />
　　3、在"连接设置"下的"登录超时（秒）"右边的框中输入一个比较大的数字，如 20。 <br />
<br />
　　查询分析器中也可以在同样位置进行设置。 <br />
<br />
<br />
<br />
在windows控制面版--&gt;管理工具--&gt;服务--&gt;MSSQLSERVER--&gt;属性--&gt;改为你的新的操作系统密码！ <br />
或 <br />
在windows控制面版--&gt;管理工具--&gt;服务--&gt;MSSQLSERVER--&gt;属性--&gt;改为本地登陆！ <br />
<img src ="http://www.blogjava.net/xlth2006/aggbug/315191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xlth2006/" target="_blank">铁猴</a> 2010-03-11 17:06 <a href="http://www.blogjava.net/xlth2006/archive/2010/03/11/315191.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL语句大全/ SQL 函数</title><link>http://www.blogjava.net/xlth2006/archive/2009/10/05/297224.html</link><dc:creator>铁猴</dc:creator><author>铁猴</author><pubDate>Sun, 04 Oct 2009 23:49:00 GMT</pubDate><guid>http://www.blogjava.net/xlth2006/archive/2009/10/05/297224.html</guid><wfw:comment>http://www.blogjava.net/xlth2006/comments/297224.html</wfw:comment><comments>http://www.blogjava.net/xlth2006/archive/2009/10/05/297224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xlth2006/comments/commentRss/297224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xlth2006/services/trackbacks/297224.html</trackback:ping><description><![CDATA[<div id="blogDetailDiv" style="font-size: 16px">
<p><font size="2">SQL语句大全/ SQL 经典语句</font></p>
<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --语 句 功 能<br />
<strong>--数据操作</strong><br />
SELECT --从数据库表中检索数据行和列<br />
INSERT --向数据库表添加新数据行<br />
DELETE --从数据库表中删除数据行<br />
UPDATE --更新数据库表中的数据<br />
<strong>--数据定义</strong><br />
CREATE TABLE --创建一个数据库表<br />
DROP TABLE --从数据库中删除表<br />
ALTER TABLE --修改数据库表结构<br />
CREATE VIEW --创建一个视图<br />
DROP VIEW --从数据库中删除视图<br />
CREATE INDEX --为数据库表创建一个索引<br />
DROP INDEX --从数据库中删除索引<br />
CREATE PROCEDURE --创建一个存储过程<br />
DROP PROCEDURE --从数据库中删除存储过程<br />
CREATE TRIGGER --创建一个触发器<br />
DROP TRIGGER --从数据库中删除触发器<br />
CREATE SCHEMA --向数据库添加一个新模式<br />
DROP SCHEMA --从数据库中删除一个模式<br />
CREATE DOMAIN --创建一个数据值域<br />
ALTER DOMAIN --改变域定义<br />
DROP DOMAIN --从数据库中删除一个域<br />
<strong>--数据控制</strong><br />
GRANT --授予用户访问权限<br />
DENY --拒绝用户访问<br />
REVOKE --解除用户访问权限<br />
<strong>--事务控制</strong><br />
COMMIT --结束当前事务<br />
ROLLBACK --中止当前事务<br />
SET TRANSACTION --定义当前事务数据访问特征<br />
</font><font size="2"><strong>--程序化SQL<br />
</strong>DECLARE --为查询设定游标<br />
EXPLAN --为查询描述数据访问计划<br />
OPEN --检索查询结果打开一个游标<br />
FETCH --检索一行查询结果<br />
CLOSE --关闭游标<br />
PREPARE --为动态执行准备SQL 语句<br />
EXECUTE --动态地执行SQL 语句<br />
DESCRIBE --描述准备好的查询<br />
<strong>---局部变量</strong><br />
declare @id char(10)<br />
--set @id = '10010001'<br />
select @id = '10010001'</font></p>
<p><font size="2"><strong>---全局变量</strong><br />
---必须以@@开头</font></p>
<p><font size="2"><strong>--IF ELSE</strong><br />
declare @x int @y int @z int<br />
select @x = 1 @y = 2 @z=3<br />
if @x &gt; @y<br />
print 'x &gt; y' --打印字符串'x &gt; y'<br />
else if @y &gt; @z<br />
print 'y &gt; z'<br />
else print 'z &gt; y'</font></p>
<p><font size="2"><strong>--CASE</strong><br />
use pangu<br />
update employee<br />
set e_wage =<br />
case<br />
when job_level = &#8217;1&#8217; then e_wage*1.08<br />
when job_level = &#8217;2&#8217; then e_wage*1.07<br />
when job_level = &#8217;3&#8217; then e_wage*1.06<br />
else e_wage*1.05<br />
end</font></p>
<p><font size="2"><strong>--WHILE CONTINUE BREAK</strong><br />
declare @x int @y int @c int<br />
select @x = 1 @y=1<br />
while @x &lt; 3<br />
begin<br />
print @x --打印变量x 的值<br />
while @y &lt; 3<br />
begin<br />
select @c = </font><font size="2">100*@x</font><font size="2"> + @y<br />
print @c --打印变量c 的值<br />
select @y = @y + 1<br />
end<br />
select @x = @x + 1<br />
select @y = 1<br />
end</font></p>
<p><font size="2"><strong>--WAITFOR</strong><br />
--例 等待1 小时2 分零3 秒后才执行SELECT 语句<br />
waitfor delay &#8217;01:02:03&#8217;<br />
select * from employee<br />
--例 等到晚上11 点零8 分后才执行SELECT 语句<br />
waitfor time &#8217;23:08:00&#8217;<br />
select * from employee</font></p>
<p><font size="2">***SELECT***</font></p>
<p><font size="2">select *(列名) from table_name(表名) where column_name operator value<br />
ex:(宿主)<br />
select * from stock_information where stockid = str(nid)<br />
stockname = 'str_name'<br />
stockname like '% find this %'<br />
stockname like '[a-zA-Z]%' --------- ([]指定值的范围)<br />
stockname like '[^F-M]%' --------- (^排除指定范围)<br />
--------- 只能在使用like关键字的where子句中使用通配符)<br />
or stockpath = 'stock_path'<br />
or stocknumber &lt; 1000<br />
and stockindex = 24<br />
not stock*** = 'man'<br />
stocknumber between 20 and 100<br />
stocknumber in(10,20,30)<br />
order by stockid desc(asc) --------- 排序，desc-降序，asc-升序<br />
order by 1,2 --------- by列号<br />
stockname = (select stockname from stock_information where stockid = 4)<br />
--------- 子查询<br />
--------- 除非能确保内层select只返回一个行的值，<br />
--------- 否则应在外层where子句中用一个in限定符<br />
select distinct column_name form table_name --------- distinct指定检索独有的列值，不重复<br />
select stocknumber ,stocknumber + 10 = stocknumber + 10 from table_name<br />
select stockname , stocknumber = count(*) from table_name group by stockname<br />
--------- group by 将表按行分组,指定列中有相同的值<br />
having count(*) = 2 --------- having选定指定的组</font></p>
<p><font size="2">select *<br />
from table1, table2<br />
where table1.id *= table2.id -------- 左外部连接，table1中有的而table2中没有得以null表示<br />
table1.id =* table2.id -------- 右外部连接</font></p>
<p><font size="2">select stockname from table1<br />
union [all] ----- union合并查询结果集，all-保留重复行<br />
select stockname from table2</font></p>
<p><font size="2">***insert***</font></p>
<p><font size="2">insert into table_name (Stock_name,Stock_number) value (xxx,xxxx)<br />
value (select Stockname , Stocknumber from Stock_table2)---value为select语句</font></p>
<p><font size="2">***update***</font></p>
<p><font size="2">update table_name set Stockname = xxx [where Stockid = 3]<br />
Stockname = default<br />
Stockname = null<br />
Stocknumber = Stockname + 4</font></p>
<p><font size="2">***delete***</font></p>
<p><font size="2">delete from table_name where Stockid = 3<br />
truncate table_name ----------- 删除表中所有行，仍保持表的完整性<br />
drop table table_name --------------- 完全删除表</font></p>
<p><font size="2">***alter table*** --- 修改数据库表结构</font></p>
<p><font size="2">alter table database.owner.table_name add column_name char(2) null .....<br />
sp_help table_name ---- 显示表已有特征<br />
create table table_name (name char(20), age smallint, lname varchar(30))<br />
insert into table_name select ......... ----- 实现删除列的方法（创建新表）<br />
alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束</font></p>
<p><font size="2">***function(/*常用函数*/)***</font></p>
<p><font size="2"><strong>----统计函数----</strong><br />
***G --求平均值<br />
COUNT --统计数目<br />
MAX --求最大值<br />
MIN --求最小值<br />
SUM --求和</font></p>
<p><font size="2">--***G<br />
use pangu<br />
select avg(e_wage) as dept_avgWage<br />
from employee<br />
group by dept_id</font></p>
<p><font size="2"><strong>--MAX</strong><br />
--求工资最高的员工姓名<br />
use pangu<br />
select e_name<br />
from employee<br />
where e_wage =<br />
(select max(e_wage)<br />
from employee)</font></p>
<p><font size="2">--STDEV()<br />
--STDEV()函数返回表达式中所有数据的标准差</font></p>
<p><font size="2">--STDEVP()<br />
--STDEVP()函数返回总体标准差</font></p>
<p><font size="2">--VAR()<br />
--VAR()函数返回表达式中所有值的统计变异数</font></p>
<p><font size="2">--VARP()<br />
--VARP()函数返回总体变异数</font></p>
<p><font size="2">----算术函数----</font></p>
<p><font size="2">/***三角函数***/<br />
SIN(float_expression) --返回以弧度表示的角的正弦<br />
COS(float_expression) --返回以弧度表示的角的余弦<br />
TAN(float_expression) --返回以弧度表示的角的正切<br />
COT(float_expression) --返回以弧度表示的角的余切<br />
/***反三角函数***/<br />
ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角<br />
ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角<br />
ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角<br />
ATAN2(float_expression1,float_expression2)<br />
--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角<br />
DEGREES(numeric_expression)<br />
--把弧度转换为角度返回与表达式相同的数据类型可为<br />
--INTEGER/MONEY/REAL/FLOAT 类型<br />
RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为<br />
--INTEGER/MONEY/REAL/FLOAT 类型<br />
EXP(float_expression) --返回表达式的指数值<br />
LOG(float_expression) --返回表达式的自然对数值<br />
LOG10(float_expression)--返回表达式的以10 为底的对数值<br />
SQRT(float_expression) --返回表达式的平方根<br />
/***取近似值函数***/<br />
CEILING(numeric_expression) --返回&gt;=表达式的最小整数返回的数据类型与表达式相同可为<br />
--INTEGER/MONEY/REAL/FLOAT 类型<br />
FLOOR(numeric_expression) --返回&lt;=表达式的最小整数返回的数据类型与表达式相同可为<br />
--INTEGER/MONEY/REAL/FLOAT 类型<br />
ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据<br />
--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型<br />
ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为<br />
--INTEGER/MONEY/REAL/FLOAT 类型<br />
SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型<br />
--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型<br />
PI() --返回值为&#960; 即3.1415926535897936<br />
RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数</font></p>
<p><font size="2">----字符串函数----<br />
ASCII() --函数返回字符表达式最左端字符的ASCII 码值<br />
CHAR() --函数用于将ASCII 码转换为字符<br />
--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值<br />
LOWER() --函数把字符串全部转换为小写<br />
UPPER() --函数把字符串全部转换为大写<br />
STR() --函数把数值型数据转换为字符型数据<br />
LTRIM() --函数把字符串头部的空格去掉<br />
RTRIM() --函数把字符串尾部的空格去掉<br />
LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串<br />
CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置<br />
SOUNDEX() --函数返回一个四位字符码<br />
--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值<br />
DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异<br />
--0 两个SOUNDEX 函数返回值的第一个字符不同<br />
--1 两个SOUNDEX 函数返回值的第一个字符相同<br />
--2 两个SOUNDEX 函数返回值的第一二个字符相同<br />
--3 两个SOUNDEX 函数返回值的第一二三个字符相同<br />
--4 两个SOUNDEX 函数返回值完全相同</font></p>
<p><font size="2">QUOTENAME() --函数返回被特定字符括起来的字符串<br />
/*select quotename('abc', '{') quotename('abc')<br />
运行结果如下<br />
----------------------------------{<br />
{abc} [abc]*/</font></p>
<p><font size="2">REPLICATE() --函数返回一个重复character_expression 指定次数的字符串<br />
/*select replicate('abc', 3) replicate( 'abc', -2)<br />
运行结果如下<br />
----------- -----------<br />
abcabcabc NULL*/</font></p>
<p><font size="2">REVERSE() --函数将指定的字符串的字符排列顺序颠倒<br />
REPLACE() --函数返回被替换了指定子串的字符串<br />
/*select replace('abc123g', '123', 'def')<br />
运行结果如下<br />
----------- -----------<br />
abcdefg*/</font></p>
<p><font size="2">SPACE() --函数返回一个有指定长度的空白字符串<br />
STUFF() --函数用另一子串替换字符串指定位置长度的子串</font></p>
<p><font size="2">----数据类型转换函数----<br />
CAST() 函数语法如下<br />
CAST() (&lt;expression&gt; AS &lt;data_ type&gt;[ length ])<br />
CONVERT() 函数语法如下<br />
CONVERT() (&lt;data_ type&gt;[ length ], &lt;expression&gt; [, style])</font></p>
<p><font size="2">select cast(100+99 as char) convert(varchar(12), getdate())<br />
运行结果如下<br />
------------------------------ ------------<br />
199 Jan 15 2000</font></p>
<p><font size="2">----日期函数----<br />
DAY() --函数返回date_expression 中的日期值<br />
MONTH() --函数返回date_expression 中的月份值<br />
YEAR() --函数返回date_expression 中的年份值<br />
DATEADD(&lt;datepart&gt; ,&lt;number&gt; ,&lt;date&gt;)<br />
--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期<br />
DATEDIFF(&lt;datepart&gt; ,&lt;number&gt; ,&lt;date&gt;)<br />
--函数返回两个指定日期在datepart 方面的不同之处<br />
DATENAME(&lt;datepart&gt; , &lt;date&gt;) --函数以字符串的形式返回日期的指定部分<br />
DATEPART(&lt;datepart&gt; , &lt;date&gt;) --函数以整数值的形式返回日期的指定部分<br />
GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间</font></p>
<p><font size="2">----系统函数----<br />
APP_NAME() --函数返回当前执行的应用程序的名称<br />
COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值<br />
COL_LENGTH(&lt;'table_name'&gt;, &lt;'column_name'&gt;) --函数返回表中指定字段的长度值<br />
COL_NAME(&lt;table_id&gt;, &lt;column_id&gt;) --函数返回表中指定字段的名称即列名<br />
DATALENGTH() --函数返回数据表达式的数据的实际长度<br />
DB_ID(['database_name']) --函数返回数据库的编号<br />
DB_NAME(database_id) --函数返回数据库的名称<br />
HOST_ID() --函数返回服务器端计算机的名称<br />
HOST_NAME() --函数返回服务器端计算机的名称<br />
IDENTITY(&lt;data_type&gt;[, seed increment]) [AS column_name])<br />
--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中<br />
/*select identity(int, 1, 1) as column_name<br />
into newtable<br />
from oldtable*/<br />
ISDATE() --函数判断所给定的表达式是否为合理日期<br />
ISNULL(&lt;check_expression&gt;, &lt;replacement_value&gt;) --函数将表达式中的NULL 值用指定值替换<br />
ISNUMERIC() --函数判断所给定的表达式是否为合理的数值<br />
NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值<br />
NULLIF(&lt;expression1&gt;, &lt;expression2&gt;)<br />
--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值</font></p>
<p>&nbsp;</p>
<p><font size="2">----------------------------------------------------------------------------------------------------------</font></p>
<p><font size="2">sql 经典语句</font></p>
<p><font size="2">SQL分类： <br />
DDL—数据定义语言(CREATE，ALTER，DROP，DECLARE) <br />
DML—数据操纵语言(SELECT，DELETE，UPDATE，INSERT) <br />
DCL—数据控制语言(GRANT，REVOKE，COMMIT，ROLLBACK)</font></p>
<p><font size="2">首先,简要介绍基础语句：<br />
1、说明：创建数据库<br />
CREATE DATABASE database-name <br />
2、说明：删除数据库<br />
drop database dbname<br />
3、说明：备份sql server<br />
--- 创建 备份数据的 device<br />
USE master<br />
EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'<br />
--- 开始 备份<br />
BACKUP DATABASE pubs TO testBack <br />
4、说明：创建新表<br />
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)<br />
根据已有的表创建新表： <br />
A：create table tab_new like tab_old (使用旧表创建新表)<br />
B：create table tab_new as select col1,col2&#8230; from tab_old definition only<br />
5、说明：删除新表drop table tabname <br />
6、说明：增加一个列<br />
Alter table tabname add column col type<br />
注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<br />
7、说明：添加主键： Alter table tabname add primary key(col) <br />
说明：删除主键： Alter table tabname drop primary key(col) <br />
8、说明：创建索引：create [unique] index idxname on tabname(col&#8230;.) <br />
删除索引：drop index idxname<br />
注：索引是不可更改的，想更改必须删除重新建。<br />
9、说明：创建视图：create view viewname as select statement <br />
删除视图：drop view viewname<br />
10、说明：几个简单的基本的sql语句<br />
选择：select * from table1 where 范围<br />
插入：insert into table1(field1,field2) values(value1,value2)<br />
删除：delete from table1 where 范围<br />
更新：update table1 set field1=value1 where 范围<br />
查找：select * from table1 where field1 like &#8217;%value1%&#8217; ---like的语法很精妙，查资料!<br />
排序：select * from table1 order by field1,field2 [desc]<br />
总数：select count * as totalcount from table1<br />
求和：select sum(field1) as sumvalue from table1<br />
平均：select avg(field1) as avgvalue from table1<br />
最大：select max(field1) as maxvalue from table1<br />
最小：select min(field1) as minvalue from table1<br />
11、说明：几个高级查询运算词<br />
A： UNION 运算符 <br />
UNION 运算符通过组合其他两个结果表（例如 TABLE1 和 TABLE2）并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 UNION ALL），不消除重复行。两种情况下，派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 <br />
B： EXCEPT 运算符 <br />
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)，不消除重复行。 <br />
C： INTERSECT 运算符<br />
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)，不消除重复行。 <br />
注：使用运算词的几个查询结果行必须是一致的。 <br />
12、说明：使用外连接 <br />
A、left outer join： <br />
左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。 <br />
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br />
B：right outer join: <br />
右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。 <br />
C：full outer join： <br />
全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。 </font></p>
<p>&nbsp;</p>
<p><font size="2">其次，大家来看一些不错的sql语句<br />
1、说明：复制表(只复制结构,源表名：a 新表名：b) (Access可用)<br />
法一：select * into b from a where 1&lt;&gt;1<br />
法二：select top 0 * into b from a</font></p>
<p><font size="2">2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用)<br />
insert into b(a, b, c) select d,e,f from b;</font></p>
<p><font size="2">3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)<br />
insert into b(a, b, c) select d,e,f from b in &#8216;具体数据库&#8217; where 条件<br />
例子：..from b in '"&amp;Server.MapPath(".")&amp;"\data.mdb" &amp;"' where..</font></p>
<p><font size="2">4、说明：子查询(表名1：a 表名2：b)<br />
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)</font></p>
<p><font size="2">5、说明：显示文章、提交人和最后回复时间<br />
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b</font></p>
<p><font size="2">6、说明：外连接查询(表名1：a 表名2：b)<br />
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c</font></p>
<p><font size="2">7、说明：在线视图查询(表名1：a )<br />
select * from (SELECT a,b,c FROM a) T where t.a &gt; 1;</font></p>
<p><font size="2">8、说明：between的用法,between限制查询数据范围时包括了边界值,not between不包括<br />
select * from table1 where time between time1 and time2<br />
select a,b,c, from table1 where a not between 数值1 and 数值2</font></p>
<p><font size="2">9、说明：in 的使用方法<br />
select * from table1 where a [not] in (&#8216;值1&#8217;,&#8217;值2&#8217;,&#8217;值4&#8217;,&#8217;值6&#8217;)</font></p>
<p><font size="2">10、说明：两张关联表，删除主表中已经在副表中没有的信息 <br />
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )</font></p>
<p><font size="2">11、说明：四表联查问题：<br />
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....</font></p>
<p><font size="2">12、说明：日程安排提前五分钟提醒 <br />
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())&gt;5 </font></p>
<p>&nbsp;</p>
<p><font size="2">13、说明：一条sql 语句搞定数据库分页<br />
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段</font></p>
<p><font size="2">14、说明：前10条记录<br />
select top 10 * form table1 where 范围</font></p>
<p><font size="2">15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<br />
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)</font></p>
<p><font size="2">16、说明：包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表<br />
(select a from tableA ) except (select a from tableB) except (select a from tableC)</font></p>
<p><font size="2">17、说明：随机取出10条数据<br />
select top 10 * from tablename order by newid()</font></p>
<p><font size="2">18、说明：随机选择记录<br />
select newid()</font></p>
<p><font size="2">19、说明：删除重复记录<br />
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)</font></p>
<p><font size="2">20、说明：列出数据库里所有的表名<br />
select name from sysobjects where type='U' </font></p>
<p><font size="2">21、说明：列出表里的所有的<br />
select name from syscolumns where id=object_id('TableName')</font></p>
<p><font size="2">22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似select 中的case。<br />
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type<br />
显示结果：<br />
type vender pcs<br />
电脑 A 1<br />
电脑 A 1<br />
光盘 B 2<br />
光盘 A 2<br />
手机 B 3<br />
手机 C 3</font></p>
<p><font size="2">23、说明：初始化表table1<br />
TRUNCATE TABLE table1</font></p>
<p><font size="2">24、说明：选择从10到15的记录<br />
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc<br />
　　<br />
随机选择数据库记录的方法（使用Randomize函数，通过SQL语句实现）<br />
　　对存储在数据库中的数据来说，随机数特性能给出上面的效果，但它们可能太慢了些。你不能要求ASP&#8220;找个随机数&#8221;然后打印出来。实际上常见的解决方案是建立如下所示的循环： <br />
Randomize <br />
RNumber = Int(Rnd*499) +1 <br />
　<br />
While Not objRec.EOF <br />
If objRec("ID") = RNumber THEN <br />
... 这里是执行脚本 ... <br />
end if <br />
objRec.MoveNext <br />
Wend <br />
　<br />
　　这很容易理解。首先，你取出1到500范围之内的一个随机数（假设500就是数据库内记录的总数）。然后，你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495，那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些，但相比更为稳固的企业解决方案这还是个小型数据库了，后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了？ <br />
　　采用SQL，你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset，如下所示： <br />
Randomize <br />
RNumber = Int(Rnd*499) + 1 <br />
　<br />
SQL = "SELECT * FROM Customers WHERE ID = " &amp; RNumber <br />
　<br />
set objRec = ObjConn.Execute(SQL) <br />
Response.WriteRNumber &amp; " = " &amp; objRec("ID") &amp; " " &amp; objRec("c_email") <br />
　<br />
　　不必写出RNumber 和ID，你只需要检查匹配情况即可。只要你对以上代码的工作满意，你自可按需操作&#8220;随机&#8221;记录。Recordset没有包含其他内容，因此你很快就能找到你需要的记录这样就大大降低了处理时间。 <br />
再谈随机数 <br />
　　现在你下定决心要榨干Random 函数的最后一滴油，那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。 <br />
　　为了取出几条随机选择的记录并存放在同一recordset内，你可以存储三个随机数，然后查询数据库获得匹配这些数字的记录： <br />
SQL = "SELECT * FROM Customers WHERE ID = " &amp; RNumber &amp; " OR ID = " &amp; RNumber2 &amp; " OR ID = " &amp; RNumber3 <br />
　<br />
　　假如你想选出10条记录（也许是每次页面装载时的10条链接的列表），你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成，但是 SELECT 语句只显示一种可能（这里的ID 是自动生成的号码）： <br />
SQL = "SELECT * FROM Customers WHERE ID BETWEEN " &amp; RNumber &amp; " AND " &amp; RNumber &amp; "+ 9" </font></p>
<p>&nbsp;</p>
<p><font size="2">　　注意：以上代码的执行目的不是检查数据库内是否有9条并发记录。</font></p>
<p><font size="2">　<br />
随机读取若干条记录，测试过<br />
Access语法：SELECT top 10 * From 表名 ORDER BY Rnd(id)<br />
Sql server:select top n * from 表名 order by newid()<br />
mysqlelect * From 表名 Order By rand() Limit n<br />
Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)<br />
语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...<br />
使用SQL语句 用...代替过长的字符串显示<br />
语法：<br />
SQL数据库：select case when len(field)&gt;10 then left(field,10)+'...' else field end as news_name,news_id from tablename<br />
Access数据库：SELECT iif(len(field)&gt;2,left(field,2)+'...',field) FROM tablename; <br />
　<br />
Conn.Execute说明<br />
Execute方法<br />
　　该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集，该方法的使用格式分为以下两种：<br />
　　　　1．执行SQL查询语句时，将返回查询得到的记录集。用法为：<br />
　　　　Set 对象变量名=连接对象.Execute("SQL 查询语言")<br />
　　　Execute方法调用后，会自动创建记录集对象，并将查询结果存储在该记录对象中，通过Set方法，将记录集赋给指定的对象保存，以后对象变量就代表了该记录集对象。</font></p>
<p><font size="2">　　　　2．执行SQL的操作性语言时，没有记录集的返回。此时用法为：<br />
　　　　连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]<br />
　　　　　　&#183;RecordAffected 为可选项，此出可放置一个变量，SQL语句执行后，所生效的记录数会自动保存到该变量中。通过访问该变量，就可知道SQL语句队多少条记录进行了操作。<br />
　　　　　　&#183;Option 可选项，该参数的取值通常为adCMDText，它用于告诉ADO，应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数，可使执行更高效。 </font></p>
<p>&nbsp;</p>
<p><font size="2">&#183;BeginTrans、RollbackTrans、CommitTrans方法<br />
　　这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物；RollbackTrans用于回滚事务；CommitTrans用于提交所有的事务处理结果，即确认事务的处理。<br />
　　事务处理可以将一组操作视为一个整体，只有全部语句都成功执行后，事务处理才算成功；若其中有一个语句执行失败，则整个处理就算失败，并恢复到处里前的状态。<br />
　　BeginTrans和CommitTrans用于标记事务的开始和结束，在这两个之间的语句，就是作为事务处理的语句。判断事务处理是否成功，可通过连接对象的Error集合来实现，若Error集合的成员个数不为0，则说明有错误发生，事务处理失败。Error集合中的每一个Error对象，代表一个错误信息。</font></p>
</div>
<img src ="http://www.blogjava.net/xlth2006/aggbug/297224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xlth2006/" target="_blank">铁猴</a> 2009-10-05 07:49 <a href="http://www.blogjava.net/xlth2006/archive/2009/10/05/297224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>