易截截图软件、单文件、免安装、纯绿色、仅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 条件的执行顺序,但是主键是可以的。


相关文档:

使用SQLServer模板来写规范的SQL语句

如果你经常遇到下面的问题,你就要考虑使用SQL Server的模板来写规范的SQL语句了:
SQL初学者。
经常忘记常用的DML或是DDL SQL 语句。
在多人开发维护的SQL中,每个人都有自己的SQL习惯,没有一套统一的规范。
在SQL Server Management Studio中,已经给大家提供了很多常用的现成SQL规范模板。
SQL Server Management ......

SQL 中文转拼音


--函数如下:
/*
CREATE FUNCTION dbo.fnpbGetPYFirstLetter 

@str NVARCHAR(4000) 

RETURNS NVARCHAR(4000) 
--WITH ENCRYPTION 
AS 
BEGIN 
DECLARE @WORD NCHAR(1),@PY NVARCHAR(4000)
SET @PY=''
WHILE LEN(@STR)>0 
BEGIN 
SET @WORD=LEF ......

Oracle SQL的优化

想起来上次面试的时候那个面试官问我
“你对优化方面了解多少”
“ORACLE优化还是SQL优化”
“SQL优化”
“这个……不知道从何说起”
“呵呵,那我问你问题好了,问问就知道你大概什么水平了”
“呵呵,好吧”
……
结果好像 ......

PB 11.5连接MS SQL Server 2005 Express

//在应用程序Open 事件代码中
idle(600)
openbakflag=1
///////////////////////读取配置文件数据库连接设置///////////////////////
string server,datname,datuser,datpsw
server=ProfileString ( "yy.ini","yygl","server", "" )
datname=ProfileString ( "yy.ini","yygl","datname", "" )
datuser=ProfileStrin ......

在sql server 2000中调用系统时间

select getdate()
是显示当前系统时间,输出的日期格式与本机日期格式有关,假入你想在什么情况下都显示成2006-12-15 10:37:00这种形式则需要转换一下
select convert(varchar(30),getdate(),20)
显示是星期几的语句是
select datename(weekday,getdate())
日期加星期的话直接加在一块就可以了
select convert(varcha ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号