易截截图软件、单文件、免安装、纯绿色、仅160KB

SQL用DataDiff查询的怪现象而引发的思考(2)

在脑子里老是记得当初写SQL的时候,总是有人提醒对于主键的条件要写在前面,至于为什么现在总是记不清楚了。但是SQL中where 条件的执行顺序跟主键以及索引有很大的关系。
把上片中的表a 加上主键:
alter table
add constraint pk_a_id primary key (id)
然后在运行上篇中出错的例句:
select * from a where id in (1,3) and datediff(day, convert(datetime,val),getdate()) < 0
竟然没有错误,返回了id=1的记录。看来,如果表中有主键的话,主键会被优先执行的。所以此时id =2的记录根本就不在考虑范围之内。
假设我们不加主键,而是加上一个unique的index:
alter table a
drop constraint pk_a_id
create unique index u_a_id on a(id)
然后再运行上面的句子:
select * from a where   id in (1,3) and datediff(day, convert(datetime,val),getdate()) < 0
出现了错误:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting datetime from character string.
可见index, 并不能改变where 条件的执行顺序,但是主键是可以的。


相关文档:

Access和SQL2000中语句的区别

1 ,对于日期字段字段
access表示为:#1981-28-12#
SQLSERVER2000表示为:''1981-02-12''
2,SQL语句区别,select ,update 在对单表操作时都差不多,
但多表操作时update语句的区别ACCESS与SQLSERVER中的Update语句对比:
SQLSERVER中更新多表的Update语句:
Update Tab1
SET a.Name = b.Name
from Tab1 a,Tab2 b
Whe ......

[收拢] 用sqlite 执行标准 sql 语法

http://www.umgr.com/blog/PostView.aspx?bpId=36294
 1. 执行sql语句
int sqlite3_exec(sqlite3*, const char *sql, sqlite3_callbacksql 语法
, void *,  char **errmsg );
这就是执行一条 sql 语句的函数。
第1个参数不再说了,是前面open函数得到的指针。说了是关键数据结构。
第2个参数const char ......

PL/SQL表


/*
PL/SQL表---table()函数用法:
利用table()函数,我们可以将PL/SQL返回的结果集代替table。
oracle内存表在查询和报表的时候用的比较多,它的速度相对物理表要快几十倍。
simple example:
1、table()结合数组:
*/
create or replace type t_test as object(
id integer,
rq date,
mc varchar2(60)
);
cr ......

SQL SERVER 2005 同步复制技术


以下实现复制步骤(以快照复制为例)
运行平台SQL SERVER 2005
一、准备工作:
1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密码,作为发布快照文件的有效访问用户。
2.在SQL SERVER下实现发布服务器和订阅服务器的通信正常(即可以互访)。打开1433端口,在防火墙中设特例
3.在发布服务器上建立一个 ......

SQL用DataDiff查询的怪现象而引发的思考。。

今天又看到新加坡的同事发过来的一段SQL语句,还是老问题,时间对比直接用大于小于号。叹了声气后,手动给改成datediff了,可是一运行出错,错误提示如下:
Msg 241, Level 16, State 1, Line 1
Conversion failed when converting datetime from character string.
为了说明方便,这里就简化一个例子好了。
create tab ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号