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

SQL参数化排序详解

编写一个储存过程usp_GetSortedShippers,它接收Northwind数据库中Shippers表的一个列名称作为其中一个输入(@colname),并从该表返回按输入的列名排序的行。另一个输入(@sortdir)表示排序的方向,‘A’表示按升顺排序,‘D’表示按降序排序。编写该存储过程时要注意它的性能,即,尽可能的使用索引(例如,排序列上的聚集或非聚集覆盖索引)。
代码清单7-4是该任务建议的第一个解决方案
代码清单7-4  参数化排序,解决方案1
USE Northwind;
GO
IF OBJECT_ID('dbo.usp_GetSortedShippers') IS NOT NULL
  DROP PROC dbo.usp_GetSortedShippers;
GO
CREATE PROC dbo.usp_GetSortedShippers
  @colname AS sysname, @sortdir AS CHAR(1) = 'A'
AS
IF @sortdir = 'A'
  SELECT ShipperID, CompanyName, Phone
  from dbo.Shippers
  ORDER BY
    CASE @colname
      WHEN N'ShipperID'   THEN CAST(ShipperID AS SQL_VARIANT)
      WHEN N'CompanyName' THEN CAST(CompanyName AS SQL_VARIANT)
      WHEN N'Phone'       THEN CAST(Phone AS SQL_VARIANT)
    END
ELSE
  SELECT ShipperID, CompanyName, Phone
  from dbo.Shippers
  ORDER BY
    CASE @colname
      WHEN N'ShipperID'   THEN CAST(ShipperID AS SQL_VARIANT)
      WHEN N'CompanyName' THEN CAST(CompanyName AS SQL_VARIANT)
      WHEN N'Phone'       THEN CAST(Phone AS SQL_VARIANT)
    END DESC;
GO
该解决方案使用IF语句根据请求的排序方向确定要执行的查询。两个查询的唯一区别是它们的排序表达式不同,一个使用升序,一个使用降序。两个查询都使用CASE表
达式根据输入的列名返回合适的列值。
注意    SQL Server根据表达式的结果中优先级最高的数据类型确定CASE表达式结果的数据类型,而不是按实际返回结果的数据类型确定。这就意味着,如果CASE表达式的一个THEN子句返回VARCHAR(30)值,而另一个返回INT值,表达式的结果将总是INT,


相关文档:

[收拢] 用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 2K 数据类型 (转)

(转载)SQL 2K 数据类型 
(1)char、varchar、text和nchar、nvarchar、ntext
char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据 ......

SQL 2000基础学习(自己总结)

以下为本人这几天重新学习SQLSERVER2000的学习笔记,目的是重新认识及巩固知识点:
一、简单的SELECT语句的语法如下:
SELECT |ALL|DISTINCT| <目标表达式>|,<目标表达式>|...
from<表或视图名>|,<表或视图名>|
[WHERE<条件表达式>]
[GROUP BY <列名1>|HAVING<条件表达式>| ......

SQL模糊查询语句(like)

确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可 使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft SQL Server ......

在sql server中关于游标cursor的使用

--此处使用pubs库
declare @myname varchar(50)
declare @fname varchar(20)
declare @lname varchar(20)
declare my_cursor cursor for
select fname,lname from employee order by emp_id
open my_cursor
fetch next from my_cursor into @fname,@lname
while @@fetch_status=0
begin
    set @ ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号