sql-server - 不能使用 LONG 数据类型

标签 sql-server backwards-compatibility

我试图让一些旧的 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

但是,我收到以下错误:

Msg 2715, Level 16, State 6, Line 2 Column, parameter, or variable #4: Cannot find data type LONG.



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

最佳答案

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

也许你的意思是 DECIMALBIGINT .

并预先阻止进一步的问题:LONGVARCHARAUTOINCREMENT也不是有效的数据类型( 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意思?为什么不实际调用它所代表的表(例如 SocialCowsScientificCholesterol ),而不是混淆名称并添加无意义的后缀只是为了招致更多的输入?

关于sql-server - 不能使用 LONG 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953914/

相关文章:

php - 从 CodeIgniter Active Record 类调用存储过程

perl - 在 Perl 中,如何检测是否在 5.9.4 之前的版本中加载了 bignum 支持?

sql - 对于具有较大 Id 的行,是否使用 DBCC CHECKIDENT 安全重置主键

SQL - 如果所有字段不为空,则获取字段总和

ios - 为仅在以后的 SDK 中可用的类添加属性

c++ - 如何在不复制此代码的情况下将多个函数放入多个 namespace ?

eclipse 开普勒 : Installing Plugins for Juno

java - 向后兼容的 LinearLayout 构造函数

sql-server - 在 SQL 中使用变量并在 SQL Server Management Studio 中保持格式设置

sql-server - Dapper.NET 和具有多个结果集的存储过程