SQL Server兼容问题
问题描述:
我有一个相当老很长的查询编写SQL Server 2000中的石器时代正如你可能会怀疑这个使用旧的加入像c.address_id =* b.address_id
SQL Server兼容问题
当我尝试运行它,一个错误弹出消息,我必须将兼容级别设置为80才能启用此类连接。我曾试过这种方式:
ALTER DATABASE SandBox
SET compatibility_level = 80
但似乎这是被忽略。该脚本大约有800行 - 那么有什么方法可以在MSSQL 2008中运行此查询而不必重写它?
这将需要每周两次在夜间运行,所以这一次我不会在意的脚本性能等
任何建议都欢迎。
答
我会重写它。
话虽如此,这对我有效。
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
答
不完全确定你到底做了什么,但在当前脚本中执行它并不一定有效。如果您仍然难以设置兼容级别,请尝试打开新的查询窗口并仅运行该部分。
为什么不更新当前连接样式的语法?即使在2000年,那些旧式的连接也不是最新的,但引擎仍然允许它们。在某些时候,你将重写这里的连接。您已经被迫以2k兼容性运行的事实对我来说是足够的理由。谈论痛苦。 – 2014-09-04 13:38:50
检查下一主题的**“最佳做法”**部分:http://msdn.microsoft.com/en-us/library/bb510680(v=sql.100).aspx – 2014-09-04 13:40:19