posts - 372, comments - 63, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2012年4月23日

0 操作成功完成。

1 功能错误。

2 系统找不到指定的文件。

3 系统找不到指定的路径。

4 系统无法打开文件。

5 拒绝访问。

6 句柄无效。

7 存储控制块被损坏。

8 存储空间不足,无法处理此命令。

9 存储控制块地址无效。

10 环境错误。

11 试图加载格式错误的程序。

12 访问码无效。

13 数据无效。

14 存储器不足,无法完成此操作。

15 系统找不到指定的驱动器。

16 无法删除目录。

17 系统无法将文件移到不同的驱动器。

18 没有更多文件。

19 介质受写入保护。

20 系统找不到指定的设备。
21 设备未就绪。
22 设备不识别此命令。
23 数据错误 (循环冗余检查)。
24 程序发出命令,但命令长度不正确。
25 驱动器无法找出磁盘上特定区域或磁道的位置。
26 无法访问指定的磁盘或软盘。
27 驱动器找不到请求的扇区。
28 打印机缺纸。
29 系统无法写入指定的设备。
30 系统无法从指定的设备上读取。
31 连到系统上的设备没有发挥作用。
32 进程无法访问文件,因为另一个程序正在使用此文件。
33 进程无法访问文件,因为另一个程序已锁定文件的一部分。
36 用来共享的打开文件过多。
38 到达文件结尾。
39 磁盘已满。
50 不支持网络请求。
51 远程计算机不可用 。
52 在网络上已有重复的名称。
53 找不到网络路径。
54 网络忙。
55 指定的网络资源或设备不再可用。
56 已到达网络 BIOS 命令限制。
57 网络适配器硬件出错。
58 指定的服务器无法运行请求的操作。
59 发生意外的网络错误。
60 远程适配器不兼容。
61 打印机队列已满。
62 无法在服务器上获得用于保存待打印文件的空间。
63 删除等候打印的文件。
64 指定的网络名不再可用。
65 拒绝网络访问。
66 网络资源类型错误。
67 找不到网络名。
68 超过本地计算机网卡的名称限制。
69 超出网络 BIOS 会话限制。
70 远程服务器已暂停,或正在启动过程中。
71 当前已无法再同此远程计算机连接,因为已达到计算机的连接数目极限。
72 已暂停指定的打印机或磁盘设备。
80 文件存在。
82 无法创建目录或文件。
83 INT 24 失败。
84 无法取得处理此请求的存储空间。
85 本地设备名已在使用中。
86 指定的网络密码错误。
87 参数错误。
88 网络上发生写入错误。
89 系统无法在此时启动另一个进程。

100 无法创建另一个系统信号灯。
101 另一个进程拥有独占的信号灯。
102 已设置信号灯且无法关闭。
103 无法再设置信号灯。
104 无法在中断时请求独占的信号灯。
105 此信号灯的前一个所有权已结束。
107 程序停止,因为替代的软盘未插入。
108 磁盘在使用中,或被另一个进程 锁定。
109 管道已结束。
110 系统无法打开指定的 设备或文件。
111 文件名太长。
112 磁盘空间不足。
113 无法再获得内部文件的标识。
114 目标内部文件的标识不正确。
117 应用程序制作的 IOCTL 调用错误。
118 验证写入的切换参数值错误。
119 系统不支持请求的命令。
120 此功能只被此系统支持。
121 信号灯超时时间已到。
122 传递到系统调用的数据区太小。
123 文件名、目录名或卷标语法不正确。
124 系统调用级别错误。
125 磁盘没有卷标。
126 找不到指定的模块。
127 找不到指定的程序。
128 没有等候的子进程。
130 试图使用操作(而非原始磁盘 I/O)的已打开磁盘分区的文件句柄。
131 试图移动文件指针到文件开头之前。
132 无法在指定的设备或文件上设置文件指针。
133 包含先前加入驱动器的驱动器无法使用 JOIN 或 SUBST 命令。
134 试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。
135 试图在已被合并的驱动器上使用 JOIN 或 SUBST 命令。
136 系统试图解除未合并驱动器的 JOIN。
137 系统试图解除未替代驱动器的 SUBST。
138 系统试图将驱动器合并到合并驱动器上的目录。
139 系统试图将驱动器替代为替代驱动器上的目录。
140 系统试图将驱动器合并到替代驱动器上的目录。
141 系统试图替代驱动器为合并驱动器上的目录。
142 系统无法在此时运行 JOIN 或 SUBST。
143 系统无法将驱动器合并到或替代为相同驱动器上的目录。
144 目录并非根目录下的子目录。
145 目录非空。
146 指定的路径已在替代中使用。
147 资源不足,无法处理此命令。
148 指定的路径无法在此时使用。
149 企图将驱动器合并或替代为驱动器上目录是上一个替代的目标的驱动器。
150 系统跟踪信息未在 CONFIG.SYS 文件中指定,或不允许跟踪。
151 为 DosMuxSemWait 指定的信号灯事件个数错误。
152 DosMuxSemWait 不可运行。已设置过多的信号灯。
153 DosMuxSemWait 清单错误。
154 输入的卷标超过目标文件系统的 长度限制
155 无法创建另一个线程。
156 接收进程已拒绝此信号。
157 段已被放弃且无法锁定。
158 段已解除锁定。
159 线程标识的地址错误。
160 传递到 DosExecPgm 的参数字符串错误。
161 指定的路径无效。
162 信号已暂停。
164 无法在系统中创建更多的线程。
167 无法锁定文件区域。
170 请求的资源在使用中。
173 对于提供取消区域进行锁定的请求不明显。
174 文件系统不支持锁定类型的最小单元更改。
180 系统检测出错误的段号。
183 当文件已存在时,无法创建该文件。
186 传递的标志错误。
187 找不到指定的系统信号灯名称。
196 操作系统无法运行此应用程序。
197 操作系统当前的配置不能运行此应用程序。
199 操作系统无法运行此应用程序。

200 代码段不可大于或等于 64K
203 操作系统找不到已输入的 环境选项。
205 命令子树中的进程 没有信号处理程序。
206 文件名或扩展名太长。
207 第 2 环堆栈已被占用。
208 没有正确输入文件名通配符 * 或 ?,或指定过多的文件名通配符。
209 正在发送的信号错误。
210 无法设置信号处理程序。
212 段已锁定且无法重新分配。
214 连到该程序或动态链接模块的动态链接模块太多。
215 无法嵌套调用 LoadModule。
230 管道状态无效。
231 所有的管道实例都在使用中。
232 管道正在关闭中。
233 管道的另一端上无任何进程。
234 更多数据可用。
240 取消会话。
254 指定的扩展属性名无效。
255 扩展属性不一致。
258 等待的操作过时。
259 没有可用的数据了。
266 无法使用复制功能。
267 目录名无效。
275 扩展属性在缓冲区中不适用。
276 装在文件系统上的扩展属性文件已损坏。
277 扩展属性表格文件已满。
278 指定的扩展属性句柄无效。
282 装入的文件系统不支持扩展属性。
288 企图释放并非呼叫方所拥有的多用户终端运行程序。
298 发向信号灯的请求过多。
299 仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求。
300 操作锁定请求被拒绝。

posted @ 2012-04-23 21:47 moss_tan_jun 阅读(109) 评论(0) 编辑

2012年4月16日

TTE

http://apps.hi.baidu.com/share/detail/37462037

posted @ 2012-04-16 23:09 moss_tan_jun 阅读(72) 评论(0) 编辑

http://apps.hi.baidu.com/share/detail/37462037

posted @ 2012-04-16 23:09 moss_tan_jun 阅读(73) 评论(0) 编辑

与ASP相比ASP.NET在Web应用开发上无疑更容易,更有效率。Web开发大部分还是围绕着数据操作,建立数据库存储数据,编写代码访问和修改数据,设计界面采集和呈现数据。走过Asp.net学习入门阶段后,真正开始着手开发一个Web项目时,才发现错综复杂的数据与关联根本就不是SqlDataSource和AccessDataSource数据源控件能简单解决的,而恰恰是被忽视了的一个ObjectDataSource数据源控件才是真正踏入开发门槛的关键,由此也对三层架构模式有了初步体验。

一.ASP.NET三层架构介绍

设计模式中的分层架构(可以参考一下J2EE中MVC模式)实现了各司其职,互不干涉,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其它层中的代码。这样就能更好的实现开发中的分工,有利于组件的重用。所以这些年关于模式的研究有很多成果,应用也很广泛。一个好的模式在程序开发和后期维护中作用重大。

ASP.NET三层架构自底向上分为:数据访问层(DAL),业务逻辑层(BLL)和表示层(PL)。

 

 

数据访问层(DAL):使用了一个强类型的DataSet作为数据访问层,只是单纯的对数据进行增,删,改,查询和判断存在等等较通用的数据访问方法(由SQL语句来提供),不应该有“事务”存在。

业务逻辑层(BLL):业务逻辑层是在数据访问层和表示层之间进行数据交换的桥梁,按业务需求调用数据访问层中的方法组合,集合了各种业务规则到一个BLL中,例如通过条件进行判断的数据操作或“事务”处理。BLL都是以类库(Class Library)的形式来实现的。

表示层(PL):表示层是为客户提供用于交互的应用服务图形界面,帮助用户理解和高效地定位应用服务,呈现业务逻辑层中传递的数据,用ASP.NET页面来实现。

posted @ 2012-04-16 23:02 moss_tan_jun 阅读(102) 评论(0) 编辑

public Line(string name)是Line类的构造函数,base(name)是其基类的构造函数。
public Line(string name): base(name)指的是在Line的构造函数中调用其基类的带string类型参数的构造函数。因为在子类不能直接继承父类的构造函数,只能通过这种方式调用

posted @ 2012-04-16 22:24 moss_tan_jun 阅读(49) 评论(0) 编辑

使用过SQL Server 2000的人都知道,要想实现行列转换,必须综合利用聚合函数和动态SQL,具体实现起来需要一定的技巧,而在SQL Server 2005中,使用新引进的关键字PIVOT/UNPIVOT,则可以很容易的实现行列转换的需求。

在本文中我们将通过两个简单的例子详细讲解PIVOT和UNPIVOT的用法。

 

PIVOT是行转列,用法如下:
假如表结构如下:
      id  name quarter  profile
      1     a        1         1000
      1     a        2         2000
      1     a        3         4000
      1     a        4         5000
      2     b        1         3000
      2     b        2         3500
      2     b        3         4200
      2     b        4         5500
  ----------------------------------------------
     使用PIVOT将四个季度的利润转换成横向显示:
       select id,name,
             [1] as "一季度",[2] as "二季度",[3] as "三季度",[4] as "四季度"
             from test
             pivot
             (
               sum(profile)
               for quarter in ([1],[2],[3],[4])
             )
             as pvt

 -----------------------------------------------
 得出的结果如下:
    id  name   一季度  二季度  三季度  四季度
    1     a         1000    2000     4000     5000
    2     b         3000    3500     4200     5500
                

========================================================================================


UNPIVOT是列转行,用法如下:
假如表结构如下:
    id   name    Q1        Q2       Q3        Q4                  
    1      a       1000    2000    4000     5000
    2      b       3000    3500    4200     5500
 -----------------------------------------------
    使用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:
       select id,name,quarter,profile
           from test
           unpivot
           (
              profile
              for quarter in ([Q1],[Q2],[Q3],[Q4])
           )
           as unpvt


 -----------------------------------------------
 得出的结果如下:
    id   name   quarter    profile
    1       a         Q1        1000
    1       a         Q2        2000
    1       a         Q3        4000
    1       a         Q4        5000
    2       b         Q1        3000
    2       b         Q2        3500
    2       b         Q3        4200
    2       b         Q4        5500

posted @ 2012-04-16 22:07 moss_tan_jun 阅读(39) 评论(0) 编辑

PIVOT 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明,请参阅 FROM (Transact-SQL)

以下是带批注的 PIVOT 语法。

SELECT <非透视的列>,

    [第一个透视的列] AS <列名称>,

    [第二个透视的列] AS <列名称>,

    ...

    [最后一个透视的列] AS <列名称>,

FROM

    (<生成数据的 SELECT 查询>)

    AS <源查询的别名>

PIVOT

(

    <聚合函数>(<要聚合的列>)

FOR

[<包含要成为列标题的值的列>]

    IN ( [第一个透视的列], [第二个透视的列],

    ... [最后一个透视的列])

) AS <透视表的别名>

<可选的 ORDER BY 子句>;

下面的代码示例生成一个两列四行的表。

USE AdventureWorks2008R2 ;
GO
SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost 
FROM Production.Product
GROUP BY DaysToManufacture;

下面是结果集:

DaysToManufacture          AverageCost

0                          5.0885

1                          223.88

2                          359.1082

4                          949.4105

没有定义 DaysToManufacture 为 3 的产品。

以下代码显示相同的结果,该结果经过透视以使 DaysToManufacture 值成为列标题。提供一个列表示三 [3] 天,即使结果为 NULL

-- Pivot table with one row and five columns
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, 
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost 
    FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;

下面是结果集:

Cost_Sorted_By_Production_Days    0         1         2           3       4       

AverageCost                       5.0885    223.88    359.1082    NULL    949.4105

可能会用到 PIVOT 的常见情况是:需要生成交叉表格报表以汇总数据。例如,假设需要在 AdventureWorks2008R2 示例数据库中查询 PurchaseOrderHeader 表以确定由某些特定雇员所下的采购订单数。以下查询提供了此报表(按供应商排序)。

USE AdventureWorks2008R2;
GO
SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5
FROM 
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [250], [251], [256], [257], [260] )
) AS pvt
ORDER BY pvt.VendorID;

以下为部分结果集。

VendorID    Emp1        Emp2        Emp3        Emp4        Emp5

1492        2           5           4           4           4

1494        2           5           4           5           4

1496        2           4           4           5           5

1498        2           5           4           4           4

1500        3           4           4           5           4

将在 EmployeeID 列上透视此嵌套 select 语句返回的结果。

SELECT PurchaseOrderID, EmployeeID, VendorID
FROM PurchaseOrderHeader;

这意味着 EmployeeID 列返回的唯一值自行变成了最终结果集中的字段。因此,在透视子句中指定的每个 EmployeeID 号都有相应的一列:在本例中为雇员 164198223231233PurchaseOrderID 列作为值列,将根据此列对最终输出中返回的列(称为分组列)进行分组。在本例中,通过 COUNT 函数聚合分组列。请注意,将显示一条警告消息,指出为每个雇员计算 COUNT 时未考虑显示在 PurchaseOrderID 列中的任何空值。

重要说明重要提示

如果聚合函数与 PIVOT 一起使用,则计算聚合时将不考虑出现在值列中的任何空值。

UNPIVOT 将与 PIVOT 执行几乎完全相反的操作,将列转换为行。假设以上示例中生成的表在数据库中存储为 pvt,并且您需要将列标识符 Emp1Emp2Emp3Emp4Emp5 旋转为对应于特定供应商的行值。这意味着必须标识另外两个列。包含要旋转的列值(Emp1Emp2...)的列将被称为 Employee,将保存当前位于待旋转列下的值的列被称为 Orders。这些列分别对应于 Transact-SQL 定义中的 pivot_columnvalue_column。以下为该查询。

--Create the table and insert values as portrayed in the previous example.
CREATE TABLE pvt (VendorID int, Emp1 int, Emp2 int,
    Emp3 int, Emp4 int, Emp5 int);
GO
INSERT INTO pvt VALUES (1,4,3,5,4,4);
INSERT INTO pvt VALUES (2,4,1,5,5,5);
INSERT INTO pvt VALUES (3,4,3,5,4,4);
INSERT INTO pvt VALUES (4,4,2,5,5,4);
INSERT INTO pvt VALUES (5,5,1,5,5,5);
GO
--Unpivot the table.
SELECT VendorID, Employee, Orders
FROM 
   (SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
   FROM pvt) p
UNPIVOT
   (Orders FOR Employee IN 
      (Emp1, Emp2, Emp3, Emp4, Emp5)
)AS unpvt;
GO

以下为部分结果集。

VendorID Employee Orders

---------- ---------- ------

1          Emp1       4

1          Emp2       3

1          Emp3       5

1          Emp4       4

1          Emp5       4

2          Emp1       4

2          Emp2       1

2          Emp3       5

2          Emp4       5

2          Emp5       5

...

请注意,UNPIVOT 并不完全是 PIVOT 的逆操作。PIVOT 会执行一次聚合,从而将多个可能的行合并为输出中的单个行。而 UNPIVOT 不会重现原始表值表达式的结果,因为行已经被合并了。另外,UNPIVOT 的输入中的空值不会显示在输出中,而在执行 PIVOT 操作之前,输入中可能有原始的空值。

AdventureWorks2008R2 示例数据库中的 Sales.vSalesPersonSalesByFiscalYears 视图将使用 PIVOT 返回每个销售人员在每个会计年度的总销售额。若要在 SQL Server Management Studio 中编写视图脚本,请在“对象资源管理器”中,在“视图”文件夹下找到 AdventureWorks2008R2 数据库对应的视图。右键单击该视图名称,再选择“编写视图脚本为”

posted @ 2012-04-16 22:03 moss_tan_jun 阅读(36) 评论(0) 编辑

--行列互转
/******************************************************************************************************************************************************
以学生成绩为例子,比较形象易懂
 
整理人:中国风(Roy)
 
日期:2008.06.06
******************************************************************************************************************************************************/
 
--1、行互列
--> --> (Roy)生成測試數據
 
if not object_id('Class') is null
    drop table Class
Go
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85 
Go
--2000方法:
动态:
 
declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
from Class group by[Course]
exec('select [Student]'+@s+' from Class group by [Student]')
 
 
生成静态:
 
select 
    [Student],
    [数学]=max(case when [Course]='数学' then [Score] else 0 end),
    [物理]=max(case when [Course]='物理' then [Score] else 0 end),
    [英语]=max(case when [Course]='英语' then [Score] else 0 end),
    [语文]=max(case when [Course]='语文' then [Score] else 0 end) 
from 
    Class 
group by [Student]
 
GO
动态:
 
declare @s nvarchar(4000)
Select     @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course]
exec('select * from Class pivot (max([Score]) for [Course] in('+@s+'))b')
 
生成静态:
select * 
from 
    Class 
pivot 
    (max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b
 
生成格式:
/*
Student 数学          物理          英语          语文
------- ----------- ----------- ----------- -----------
李四      77          85          65          65
张三      87          90          82          78
 
(2 行受影响)
*/
 
------------------------------------------------------------------------------------------
go
--加上总成绩(学科平均分)
 
--2000方法:
动态:
 
declare @s nvarchar(4000)
set @s=''
Select     @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
from Class group by[Course]
exec('select [Student]'+@s+',[总成绩]=sum([Score])  from Class group by [Student]')--加多一列(学科平均分用avg([Score]))
 
生成动态:
 
select 
    [Student],
    [数学]=max(case when [Course]='数学' then [Score] else 0 end),
    [物理]=max(case when [Course]='物理' then [Score] else 0 end),
    [英语]=max(case when [Course]='英语' then [Score] else 0 end),
    [语文]=max(case when [Course]='语文' then [Score] else 0 end),
    [总成绩]=sum([Score]) --加多一列(学科平均分用avg([Score]))
from 
    Class 
group by [Student]
 
go
 
--2005方法:
 
动态:
 
declare @s nvarchar(4000)
Select     @s=isnull(@s+',','')+quotename([Course]) from Class group by[Course] --isnull(@s+',','') 去掉字符串@s中第一个逗号
exec('select [Student],'+@s+',[总成绩] from (select *,[总成绩]=sum([Score])over(partition by [Student]) from Class) a 
pivot (max([Score]) for [Course] in('+@s+'))b ')
 
生成静态:
 
select 
    [Student],[数学],[物理],[英语],[语文],[总成绩] 
from 
    (select *,[总成绩]=sum([Score])over(partition by [Student]) from Class) a --平均分时用avg([Score])
pivot 
    (max([Score]) for [Course] in([数学],[物理],[英语],[语文]))b 
 
生成格式:
 
/*
Student 数学          物理          英语          语文          总成绩
------- ----------- ----------- ----------- ----------- -----------
李四      77          85          65          65          292
张三      87          90          82          78          337
 
(2 行受影响)
*/
 
go
 
--2、列转行
--> --> (Roy)生成測試數據
 
if not object_id('Class') is null
    drop table Class
Go
Create table Class([Student] nvarchar(2),[数学] int,[物理] int,[英语] int,[语文] int)
Insert Class
select N'李四',77,85,65,65 union all
select N'张三',87,90,82,78
Go
 
--2000:
 
动态:
 
declare @s nvarchar(4000)
select @s=isnull(@s+' union all ','')+'select [Student],[Course]='+quotename(Name,'''')--isnull(@s+' union all ','') 去掉字符串@s中第一个union all
+',[Score]='+quotename(Name)+' from Class'
from syscolumns where ID=object_id('Class') and Name not in('Student')--排除不转换的列
order by Colid
exec('select * from ('+@s+')t order by [Student],[Course]')--增加一个排序
 
生成静态:
select * 
from (select [Student],[Course]='数学',[Score]=[数学] from Class union all 
select [Student],[Course]='物理',[Score]=[物理] from Class union all 
select [Student],[Course]='英语',[Score]=[英语] from Class union all 
select [Student],[Course]='语文',[Score]=[语文] from Class)t 
order by [Student],[Course]
 
go
--2005:
 
动态:
 
declare @s nvarchar(4000)
select @s=isnull(@s+',','')+quotename(Name)
from syscolumns where ID=object_id('Class') and Name not in('Student') 
order by Colid
exec('select Student,[Course],[Score] from Class unpivot ([Score] for [Course] in('+@s+'))b')
 
go
select 
    Student,[Course],[Score] 
from 
    Class 
unpivot 
    ([Score] for [Course] in([数学],[物理],[英语],[语文]))b
 
生成格式:
/*
Student Course Score
------- ------- -----------
李四      数学      77
李四      物理      85
李四      英语      65
李四      语文      65
张三      数学      87
张三      物理      90
张三      英语      82
张三      语文      78

posted @ 2012-04-16 21:53 moss_tan_jun 阅读(114) 评论(0) 编辑

首先,sqlserver里的标识符有一定的规则,比如  你
create table abc 123(...)
那么中间含有空格,它不是符合规则的。

你会写做 create table [abc 123](....)
即以[]来定界标识符。

quotename将 字串成为有效的标识符。

它有什么用呢? 我举个例子:


你有个表名字叫做 aa[]bb

当某些应用动态语句查询时 你如何写呢
exec('select * from aa[]bb') ?X

set @sql='select * from ' + quotename('aa[]bb')
exec(@sql)

当然你也可以直接写出转义的写法

select * from [aa[]]bb]

也就是说,quotename 使函数中的输入成为一个有效的标识符。
比如上例中 aa[]bb 不是一个有效的标识符。

还有一点就是quotename函数有几种写法:
  quotename('aa') 生成的有效的标识符为 [aa]
  quotename('aa','') 生成的有效的标识符为 [aa]
  quotename('aa','''') 生成的有效的标识符为 'aa'

 

解释2:

简单来说吧
比如你有一个表,名字叫 index
你有一个动态查询,参数是表名
declare @tbname varchar(256)
set @tbname='index'
---查这个表里的数据:
print('select * from '+@tbname)
exec('select * from '+@tbname)

--这样print出来的数据是
select * from index

因为index是字键字,肯定出错,加上括号就可以了:
select * from [index]

这便有了QUOTENAME,即:
print('select * from '+QUOTENAME(@tbname))
--结果:select * from [index]
exec('select * from '+QUOTENAME(@tbname))

posted @ 2012-04-16 21:47 moss_tan_jun 阅读(20) 评论(0) 编辑

2012年4月13日

TT

 SqlParameter[] parameters = new SqlParameter[]
                    {
                        new SqlParameter("@pp1", item.OrderNum),
                        new SqlParameter("@pp2", item.OrderItemNum),
                    };

posted @ 2012-04-13 15:33 moss_tan_jun 阅读(63) 评论(0) 编辑