`
xiaoshan5634
  • 浏览: 72236 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

SQL SERVER2000升级至SQL SERVER2008(二)

阅读更多

运行升级向导之后,检测到系统出现的问题如下:

一、在 90 或更高的兼容模式下,FOR XML AUTO 查询返回派生表引用

请考虑下表:

CREATE TABLE Test(id int);
INSERT INTO Test VALUES(1);
INSERT INTO Test VALUES(2);

下面包括派生表的查询在兼容级别分别为 80、90 或更高时产生不同的结果:

SELECT * FROM 
   (SELECT a.id AS a, b.id AS b 
    FROM Test a JOIN Test b ON a.id=b.id)
AS DerivedTest 
FOR XML AUTO;

当兼容级别为 80 时,查询返回以下结果。结果引用派生表的基表别名 ab,而非派生表别名。

<a a="1"><b b="1"/></a><a a="2"><b b="2"/></a>

当兼容级别为 90 或更高时,查询返回针对派生表别名 DerivedTest 的引用,而非针对派生表基表的引用。
<DerivedTest a="1" b="1"/><DerivedTest a="2" b="2"/>

根据要求修改应用程序,以解决 FOR XML AUTO 查询(包括派生表并且在 90 或更高的兼容级别下运行)的结果发生变化这一问题。

 

二、删除对未记录的系统表的引用

在早期版本中未记录的许多系统表都已更改或不再存在,因此,如果使用这些表,在升级到 SQL Server 2008 之后可能会出现错误。由于升级顾问查找的是针对系统表名称的引用,因而它将报告任何与系统表同名的用户表。

 

三、全文搜索已在 SQL Server 2008 中发生更改

若干个全文搜索功能、设置和对象已在 SQL Server 2008 中得到修改,并且升级时不会维护许多现有设置。

 

 

四、在 90 或更高的兼容模式下不支持外部联接运算符 *= 和 =*

升级顾问检测到使用了外部联接运算符 *= 和 =*。在 90 或更高的兼容模式下不支持这两个运算符。升级到 SQL Server 2008 时,用户数据库将保持其兼容模式。在 80 兼容模式下,支持用于外部联接的 *= 和 =* 运算符,但会显示一条警告消息。如果将数据库兼容模式改为 90 或更高,则使用这两个运算符的语句将失败。

在将数据库兼容模式改为 90 或更高之前,将使用外部联接运算符 *= 和 =* 的语句修改为使用等效的 OUTER JOIN 关键字。下面的示例显示了使用 *= 运算符的查询和使用 LEFT OUTER JOIN 关键字的等效查询。

-- This query uses an old-style outer join operator.
USE pubs
SELECT employee.job_id, employee.emp_id,
   employee.fname, employee.minit, jobs.job_desc
FROM employee, jobs 
WHERE employee.job_id *= jobs.job_id
ORDER BY employee.job_id

-- This query uses the ANSI standard keywords LEFT OUTER JOIN.
USE pubs;
SELECT employee.job_id, employee.emp_id,
   employee.fname, employee.minit, jobs.job_desc
FROM employee LEFT OUTER JOIN jobs ON 
    employee.job_id = jobs.job_id
ORDER BY employee.job_id

 

 

 
五、在 SQL Server 2005 或更高版本中,ORDER BY 子句中的列别名不能以表别名作为前缀。
执行出错的排序:
USE AdventureWorks;
GO
SELECT FirstName AS f, LastName AS l
FROM Person.Contact p
ORDER BY p.l
可改为:
USE AdventureWorks;
GO
SELECT FirstName AS f, LastName AS l
FROM Person.Contact p
ORDER BY l

USE AdventureWorks;
GO
SELECT FirstName AS f, LastName AS l
FROM Person.Contact p
ORDER BY p.LastName
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics