e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 数据库 >> Mssql教程 >> SQL Server 2005 Beta 2 Transact-SQL 增强功能 2 >> 教程正文
 
教程搜索
 
 
相关教程
  • 你知道MySQL10条鲜为人知的技巧吗?
  • 你应该知道的10个MySQL客户启动选项
  • 用特殊的MySQL运算符获得更多数据比较
  • MySQL数据库中与 NULL值有关的几个问题
  • 教你快速了解公共MySQL的数据库服务器
  • MySQL 5.0在windows上的安装详细介绍
  • MySQL查询的性能优化
  • Linux操作系统中如何安装MySQL数据库
  • 23道安全门加铸MySQL数据库
  • MySQL 5.0 数据库新特性的存储过程
  • 从Windows命令行启动MySQL
  • 连接MySQL数据库失败频繁的原因
  • 加速动态网站 MySQL索引分析和优化
  • 轻松掌握如何保护MySQL中的重要数据
  • 快速掌握MySQL数据库中Show命令的用法
  • MySQL数据库的安全配置实用技巧
 
 

图文教程


  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”

  • 综合运用Office 2007批量制作奖状

  • 没有系统盘如何才能修复受损系统?

  • 巧妙运用Excel中边界的附加功能!
 
 
赞 助 商
 
 
SQL Server 2005 Beta 2 Transact-SQL 增强功能 2
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9
0040103') INSERT INTO Orders VALUES(10005, 'GNDLF', '20040104') INSERT INTO Orders VALUES(10006, 'GNDLF', '20040105') 要测试 SET NULL 和 SET DEFAULT 选项,请发出下列 DELETE 和 UPDATE 语句: DELETE FROM Customers WHERE customerid = 'FRIDA' UPDATE Customers SET customerid = 'DOLLY' WHERE customerid = 'BILLY' 结果,FRIDA 的定单被分配 customerid 列中的空值,而 BILLY 的定单被分配 DUMMY: orderid customerid orderdate ----------- ---------- ---------------------- 10001 NULL 1/1/2004 12:00:00 AM 10002 NULL 1/2/2004 12:00:00 AM 10003 DUMMY 1/1/2004 12:00:00 AM 10004 DUMMY 1/3/2004 12:00:00 AM 10005 GNDLF 1/4/2004 12:00:00 AM 10006 GNDLF 1/5/2004 12:00:00 AM 请注意,如果您使用 SET DEFAULT 选项,引用列具有非空默认值且该值在被引用的表中不具有相应值,则当您发出触发操作时,将获得错误。例如,如果您从 Customers 中删除 DUMMY 客户,然后将 GNDLF 的 customerid 更新为 GLDRL,则会获得错误。UPDATE 触发一个 SET DEFAULT 操作,该操作试图向 GNDLF 的原始定单分配在 Customers

中不具有相应行的 DUMMY 客户 ID: DELETE FROM Customers WHERE customerid = 'DUMMY' UPDATE Customers SET customerid = 'GLDRL' WHERE customerid = 'GNDLF' .Net SqlClient Data Provider: Msg 547, Level 16, State 0, Line 1 UPDATE statement conflicted with COLUMN FOREIGN KEY constraint 'FK_Orders_Customers'. The conflict occurred in database 'tempdb', table 'Customers', column 'customerid'. The statement has been terminated. 通过查看 sys.foreign_keys ,您可以找到有关外键的详细信息,包括它们的已定义的引用操作。

性能和错误处理增强功能

本节讨论用来解决以前版本的 SQL Server 中的性能问题的增强功能,提高您的数据加载能力,并且显著改善您的错误管理能力。这些增强功能包括 BULK 行集提供程序和 TRY...CATCH 错误处理结构。 BULK 行集提供程序

BULK 是 OPENROWSET 函数中指定的新的行集提供程序,它使您可以访问关系格式的文件数据。为了从文件中检索数据,您可以指定 BULK 选项、文件名以及用 bcp.exe 创建或手动创建的格式文件。您可以在从 OPENROWSET 中返回的表的别名后面的括号中,指定结果列的名称。

以下为您可以用 OPENROWSET 指定的所有选项的新语法:

OPENROWSET ( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password' | 'provider_string' } , { [ catalog. ] [ schema. ] object | 'query' } | BULK 'data_filename', {FORMATFILE = 'format_file_path' [, ] | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB} } ) ::= [ , CODEPAGE = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] [ , FIRSTROW = first_row ] [ , LASTROW = last_row ] [ , ROWS_PER_BATCH = 'rows_per_batch'] [ , MAXERRORS = 'max_errors'] [ , ERRORFILE ='file_name'] } )

例如,以下查询从文本文件“c:\temp\textfile1.txt”中返回三个列,并且向结果列提供了列别名 col1、col2 和 col3:

SELECT col1, col2, col3 FROM OPENROWSET(BULK 'c:\temp\textfile1.txt', FORMATFILE = 'c:\temp\textfile1.fmt') AS C(col1, col2, col3)


请注意,当您使用 BULK 选项时,也必须指定格式文件,除非您使用我稍后将描述的 SINGLE_BLOB、SINGLE_CLOB 或 SINGLE_NCLOB 选项。因此,无须指定数据文件类型、字段终止符或行终止符。您可以根据需要与 FORMATFILE 一起指定的其他选项包括:CODEPAGE、FIRSTROW、LASTROW、ROW_PER_BATCH、MAXERRORS 和 ERRORFILE。大多数选项可以通过 SQL Server 2000 中的 BULK INSERT 命令使用。ERRORFILE 选项在概念上是新的。该文件包含零个或更多个具有来自输入数据文件的格式化错误的行(即,这些行无法转换为 OLEDB 行集)。这些行从数据文件中“按原样”复制到该错误文件中。在修复该错误之后,数据就会立即具有预期的格式,因此可以使用相同的命令容易地重新加载它。错误文件是在命令执行开始时创建的。如果该文件已经存在,则会引发错误。通过观察该文件中的行,可以容易地识别失败的行,但是没有办法知道失败的原因。为了解决该问题,自动创建一个扩展名为 .ERROR.txt 的控制文件。该文件引用 ERRORFILE 中的每个行并且提供错误诊断。

您可以使用 BULK 行集提供程序,用从 OPENROWSET 返回的结果填充一个表,并且为批量加载操作指定表选项。例如,以下代码将上一个查询的结果加载到表 MyTable 中,并请求禁用目标表中的约束检查:

INSERT INTO MyTable WITH (IGNORE_CONSTRAINTS) SELECT col1, col2, col3 FROM OPENROWSET(BULK 'c:\temp\textfile1.txt', FORMATFILE = 'c:\temp\textfile1.fmt') AS C(col1, col2, col3)

除了 IGNORE_CONSTRAINTS 选项以外,可以在加载操作中指定的其他表提示包括:BULK_KEEPIDENTITY、BULK_KEEPNULLS 和 IGNORE_TRIGGERS。

您还可以使用 BULK 提供程序,通过指定下列选项之一,将文件数据作为某个大型对象类型的单个列值返回:用于字符数据的 SINGLE_CLOB、用于 Unicode 数据的 SINGLE_NCLOB 以及用于二进制数据的 SINGLE_BLOB。当您使用上述选项之一时,您没有指定格式文件。您可以将文件加载(使用 INSERT 或 UPDATE 语句)到下列数据类型之一的大型对象列中:VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX) 或 XML。在下文中,您可以找到有关变长列的 MAX 说明符以及有关 XML 数据类型的详细信息。

作为将文件加载到大型列中的示例,以下 UPDATE 语句将文本文件“c:\temp\textfile101.txt”加载到客户 101 的表 CustomerData 中的列 txt_data 中:

UPDATE CustomerData SET txt_data = (SELECT txt_data FROM OPENROWSET( BULK 'c:\temp\textfile101.txt', SINGLE_CLOB) AS F(txt_data)) WHERE custid = 101


请注意,一次只能更新一个大型列。

以下示例说明了如何使用 INSERT 语句将客户 102 的二进制文件加载到大型列中:

INSERT INTO CustomerData(custid, binary_data) SELECT 102 AS custid, binary_data FROM OPENROWSET( BULK 'c:\temp\binfile102.dat', SINGLE_BLOB) AS F(binary_data)

异常处理

SQL Server 2005 Beta 2 以 TRY...CATCH Transact-SQL 结构的形式引入了一种简单但非常强大的异常处理机制。

以前版本的 SQL Server 要求在每个怀疑可能出错的语句之后包含错误处理代码。要将错误检查代码集中在一起,必须使用标签和 GOTO 语句。此外,诸如数据类型转换错误之类的错误会导致批处理终止;因此,无法用 Transact-SQL 捕获这些错误。SQL Server 2005 Beta 2 解决了这些问题中的很多问题。

现在可以捕获和处理过去会导致批处理终止的错误,前提是这些错误不会导致连接中断(通常是严重度为 21 及以上的错误,例如,表或数据库完整性可疑、硬件错误等等)。

在 BEGIN TRY/END TRY 块中编写您希望执行的代码,并且后面紧跟位于 BEGIN CATCH/END CATCH 块中的错误处理代码。请注意,TRY 块必须具有相应的 CATCH 块;否则,您将得到语法错误。作为一个简单的示例,请考虑以下 Employees 表:

CREAT

上一页  1 2 3 4 5 6 7 8 9 10  ... 下一页  >> 
  • 上一篇教程: SQL Server 2005 中的分区表和索引
  • 下一篇教程: 在 SQL Server 2005 Beta 2 中编辑 Transact-SQL 代码
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.