SQL Server兼容问题

问题描述:

我有一个相当老很长的查询编写SQL Server 2000中的石器时代正如你可能会怀疑这个使用旧的加入像c.address_id =* b.address_idSQL Server兼容问题

当我尝试运行它,一个错误弹出消息,我必须将兼容级别设置为80才能启用此类连接。我曾试过这种方式:

ALTER DATABASE SandBox 
SET compatibility_level = 80 

但似乎这是被忽略。该脚本大约有800行 - 那么有什么方法可以在MSSQL 2008中运行此查询而不必重写它?

这将需要每周两次在夜间运行,所以这一次我不会在意的脚本性能等

任何建议都欢迎。

+0

为什么不更新当前连接样式的语法?即使在2000年,那些旧式的连接也不是最新的,但引擎仍然允许它们。在某些时候,你将重写这里的连接。您已经*以2k兼容性运行的事实对我来说是足够的理由。谈论痛苦。 – 2014-09-04 13:38:50

+0

检查下一主题的**“最佳做法”**部分:http://msdn.microsoft.com/en-us/library/bb510680(v=sql.100).aspx – 2014-09-04 13:40:19

我会重写它。

话虽如此,这对我有效。

ALTER DATABASE ScratchPadDB 
SET compatibility_level = 80 

Select @@Version /* Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 2010 15:53:02 Copyright (c) Microsoft Corporation Developer Edition on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (WOW64) (Hypervisor) */ 

/**/ 


IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = N'dbo' and TABLE_NAME = N'Employee' and TABLE_TYPE = N'BASE TABLE') 
BEGIN 
DROP TABLE [dbo].[Employee] 
END 
GO 


IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = N'dbo' and TABLE_NAME = N'Department' and TABLE_TYPE = N'BASE TABLE') 
BEGIN 
DROP TABLE [dbo].[Department] 
END 
GO 

/**/ 


CREATE TABLE [dbo].[Department](
    [DepartmentUUID] [uniqueidentifier] NOT NULL, 
    [TheVersionProperty] [timestamp] NOT NULL, 
    [DepartmentName] [nvarchar](80) NULL, 
    [CreateDate] [datetime] NOT NULL 
    ) 


ALTER TABLE dbo.[Department] ADD CONSTRAINT PK_Department PRIMARY KEY NONCLUSTERED ([DepartmentUUID]) 
GO 

ALTER TABLE [dbo].[Department] ADD CONSTRAINT CK_DepartmentName_Unique UNIQUE ([DepartmentName]) 
GO 


CREATE TABLE [dbo].[Employee] ( 

    [EmployeeUUID] [uniqueidentifier] NOT NULL, 
    [ParentDepartmentUUID] [uniqueidentifier] NOT NULL, 
    [TheVersionProperty] [timestamp] NOT NULL, 
    [SSN] [nvarchar](11) NOT NULL, 
    [LastName] [varchar](64) NOT NULL, 
    [FirstName] [varchar](64) NOT NULL, 
    [CreateDate] [datetime] NOT NULL, 
    [HireDate] [datetime] NOT NULL 
    ) 

GO 

ALTER TABLE dbo.Employee ADD CONSTRAINT PK_Employee PRIMARY KEY NONCLUSTERED (EmployeeUUID) 
GO 


ALTER TABLE [dbo].[Employee] ADD CONSTRAINT CK_SSN_Unique UNIQUE (SSN) 
GO 

ALTER TABLE [dbo].[Employee] ADD CONSTRAINT FK_EmployeeToDepartment FOREIGN KEY (ParentDepartmentUUID) REFERENCES dbo.Department (DepartmentUUID) 
GO 


Select * from 
dbo.Department d, dbo.Employee e 
Where 
d.DepartmentUUID =* e.ParentDepartmentUUID 
+0

谢谢,我最终改写它。至少它在性能和速度方面要好得多。 – 2014-09-08 13:02:28

不完全确定你到底做了什么,但在当前脚本中执行它并不一定有效。如果您仍然难以设置兼容级别,请尝试打开新的查询窗口并仅运行该部分。