我试图让一些旧的 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 中都不是有效的数据类型。更改兼容性级别不会影响您使用旧数据类型或新数据类型的能力。这只会影响解析某些语言结构的方式。
也许你的意思是 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
),而不是混淆名称并添加无意义的后缀只是为了招致更多的输入?
关于sql-server - 不能使用 LONG 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953914/