无法使用LONG数据类型

Cha*_*son 3 sql-server backwards-compatibility

我正在尝试使用一些旧的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
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

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

我确信有一些简单的东西我缺失了,我只需要朝着正确的方向轻推.这不是一个权限问题,据我所知,SET compatibility_level = 90执行正常,没有错误.不过,我在使用时遇到错误LONG.

Aar*_*and 13

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
Run Code Online (Sandbox Code Playgroud)

顺便说一句,表中的每一列都真的可以为空吗?你的表名真的需要后缀Table吗?什么Sc意思?为什么不实际调用表所代表的内容(例如SocialCowsScientificCholesterol)而不是混淆名称并添加无意义的后缀只是为了招致更多的输入?

  • 对于仍在阅读本文的任何人,Gupta (OpenText) SQLBase (.dbs) 文件也使用“LONG”或“LONGVARCHAR”或“LONGBINARY”和“AUTOINCRMENT”。Gupta SQLBase 松散地源自 Oracle,它也支持这些数据类型。 (2认同)