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

SQL 动态排序的方法

在公共新闻组中,一个经常出现的问题是“怎样才能根据传递给存储过程的参数返回一个排序的输出?”。在一些高水平专家的帮助之下,我整理出了这个问题的几种解决方案。
一、用IF...ELSE执行预先编写好的查询
  对于大多数人来说,首先想到的做法也许是:通过IF...ELSE语句,执行几个预先编写好的查询中的一个。例如,假设要从Northwind数据库查询得到一个货主(Shipper)的排序列表,发出调用的代码以存储过程参数的形式指定一个列,存储过程根据这个列排序输出结果。Listing 1显示了这种存储过程的一个可能的实现(GetSortedShippers存储过程)。
【Listing 1: 用IF...ELSE执行多个预先编写好的查询中的一个】
CREATE PROC GetSortedShippers
@OrdSeq AS int
AS
IF @OrdSeq = 1
SELECT * from Shippers ORDER BY ShipperID
ELSE IF @OrdSeq = 2
SELECT * from Shippers ORDER BY CompanyName
ELSE IF @OrdSeq = 3
SELECT * from Shippers ORDER BY Phone
  这种方法的优点是代码很简单、很容易理解,SQL Server的查询优化器能够为每一个SELECT查询创建一个查询优化计划,确保代码具有最优的性能。这种方法最主要的缺点是,如果查询的要求发生了改变,你必须修改多个独立的SELECT查询——在这里是三个。
二、用列名字作为参数
  另外一个选择是让查询以参数的形式接收一个列名字。Listing 2显示了修改后的GetSortedShippers存储过程。CASE表达式根据接收到的参数,确定SQL Server在ORDER BY子句中使用哪一个列值。注意,ORDER BY子句中的表达式并未在SELECT清单中出现。在ANSI SQL-92标准中,ORDER BY子句中不允许出现没有在SELECT清单中指定的表达式,但ANSI SQL-99标准允许。SQL Server一直允许这种用法。
【Listing 2:用列名字作为参数,第一次尝试】
CREATE PROC GetSortedShippers
@ColName AS sysname
AS
SELECT *
from Shippers
ORDER BY
CASE @ColName
WHEN 'ShipperID' THEN ShipperID
WHEN 'CompanyName' THEN CompanyName
WHEN 'Phone' THEN Phone
ELSE NULL
END
  现在,我们来试一下新的存储过程,以参数的形式指定ShipperID列:
EXEC GetSortedShippers 'ShipperID'
  此时一切正常。但是,当我们视图把CompanyName列作为参数调用存储过程时,它不再有效:
EXEC GetSortedShippers 'CompanyName'
  仔细看一下错误信息:
Server


相关文档:

[收拢] 用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 ......

SQL分页查询

/*第几页必须大于1
select top 每页数量 * id
 from @t a
 where id not in
 (select top (第几页-1)*每页数量 id
  from @t b
 )
*/
declare @lcSqlCommand nvarchar(100)
declare @t table (id int IDENTITY,orderDate datetime)
insert into @t
 select orderDate
&nb ......

sql数据库置疑解决办法

注'svw'为出问题的数据库,此方式对sql7.0以上版本有效,其它低版本为测试
sp_configure  'allow',1 
go
reconfigure  with  override 
go
update  sysdatabases  set  status=32768  where  name='svw' 
go
dbcc  rebuild_log('svw','D:\mssql7\data ......

SQL面试题目与常见问题

SQL面试题
Sql常用语法
下列语句部分是Mssql语句,不可以在access中使用。
 
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句:
1、说明:创建 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号