2014-09-04 85 views
0

我有一個相當老很長的查詢編寫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

回答

1

我會重寫它。

話雖如此,這對我有效。

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

1

不完全確定你到底做了什麼,但在當前腳本中執行它並不一定有效。如果您仍然難以設置兼容級別,請嘗試打開新的查詢窗口並僅運行該部分。