结果,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 行集提供程序和 TRYCATCH 错误处理结构。
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 行集)。这些行从数据文件中“按原样”复制到该错误文件中。在修复该错误之后,数据就会