我正在尝试使用一些旧的SQL 2005代码来处理SQL 2012 Express。但是,每当我设置compatibility_level
to 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
时出现错误。
答案 0 :(得分:13)
LONG
在任何版本的SQL Server中都不是有效的数据类型。更改兼容级别不会影响您使用旧数据类型或新数据类型的能力。这只会影响解析某些语言结构的方式。
也许您的意思是DECIMAL
或BIGINT
。
要预先阻止进一步的问题:LONGVARCHAR
和AUTOINCREMENT
也不是有效的数据类型(check the documentation instead of guessing)。你在哪里得到这个脚本,谁建议它应该在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
是什么意思?为什么不实际调用表所代表的内容(例如SocialCows
或ScientificCholesterol
)而不是混淆名称并添加无意义的后缀以引发更多的输入?