5

我正在尝试让一些旧版 SQL 2005 代码在 SQL 2012 Express 上运行。但是,每当我将其设置compatibility_level为 90时,当我尝试使用较旧的数据类型时就会出错。理论上,以下代码应该可以工作:

USE wsus_results
GO

ALTER DATABASE wsus_results
SET compatibility_level = 90
GO

CREATE TABLE ScTable (
 TblName VARCHAR(255) NULL,
 TblType VARCHAR(255) NULL, 
 FieldCnt INTEGER NULL,
 RecordCnt LONG NULL,
 Description LONGVARCHAR NULL,
 TblId AUTOINCREMENT PRIMARY KEY)
GO

但是,我收到以下错误:

消息 2715,级别 16,状态 6,第 2 行列、参数或变量 #4:找不到数据类型 LONG。

我确定我缺少一些简单的东西,我只需要朝着正确的方向轻推。这不是权限问题,据我所知,SET compatibility_level = 90执行良好,没有错误。不过,我在使用LONG.

4

1 回答 1

16

LONG在任何版本的 SQL Server 中都不是有效的数据类型。更改兼容性级别不会影响您使用旧数据类型或新数据类型的能力。这只会影响某些语言结构的解析方式。

也许你的意思是DECIMALBIGINT

并预先提出进一步的问题:LONGVARCHAR并且AUTOINCREMENT也不是有效的数据类型(检查文档而不是猜测)。你从哪里得到这个脚本,谁建议它应该在 SQL Server 中工作?我想你可能被恶作剧了。试试这个:

USE wsus_results;
GO

ALTER DATABASE wsus_results
SET compatibility_level = 110;
GO

CREATE TABLE dbo.ScTable -- schema prefix is important!
(
 TblName     VARCHAR(255),
 TblType     VARCHAR(255), 
 FieldCnt    INT,
 RecordCnt   BIGINT,
 Description VARCHAR(MAX),
 TblId       INT IDENTITY(1,1) NOT NULL PRIMARY KEY
);
GO

顺便说一句,表中的所有其他列真的可以为空吗?你的表名真的需要后缀Table吗?是什么Sc意思?为什么不实际调用表所代表的内容(例如SocialCowsor ScientificCholesterol),而不是混淆名称并添加无意义的后缀来增加输入?

于 2013-07-30T18:00:25.433 回答